- - PR -
AxisでSOAP Attachmentの方法
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2003-07-08 17:23
はじめまして、UKです。このたび大学の卒業研究でAxisを用いたWebサービスについて調べる
ことになりました。そこでXMLファイルをクライアント⇔サーバーで伝送したいのですが、 SOAP Attachmentの方法が調べたのですがまったくわからず困っています。 とりあえずファイルをString型に変換してから伝送しているのですが、できれば添付ファイル という形でそのままファイルを伝送したいのです。 よければ皆さんの作成したSOAP Attachmentを使用したプログラムを教えていただけないでしょうか? 何か例になるソースさえあれば勉強しやすいと思うので、探したのですが自分では見つけること ができませんでした。 どなたか、ご教授お願いします | ||||
|
投稿日時: 2003-07-09 09:06
はじめまして、いたちです。
SUNのチュートリアルに関連記事がありますよ。 http://java.sun.com/webservices/docs/1.1/tutorial/doc/ [Chapter 12: Web Services Messaging with JAXM]の[Tutorial]に [Adding Attachments]というのがあります。 ご参考になれば。。。 | ||||
|
投稿日時: 2003-07-10 14:01
ありがとうございます、いたちさん。
教えていただいたページを読んで、書いてある内容は ある程度理解できるのですが、実際掲載されていることをサーバー側、クライアント側、そして WSDLの中身でどのように使用してよいのかわかりません。よければもう少し詳しく教えていただけないでしょうか? Attachmentを使用してもサーバ側のインターフェース作成→Java2WSDLでWSDLファイル作成→ WSDL2JavaでサービスとWSDDファイルの作成といった具合の作成手順でつくれるのですか? | ||||
|
投稿日時: 2003-07-10 21:25
ども、いたちです。
Java2WSDLについてはよく知らないので予想になってしまいますが。。。 Attachmentを使った場合、例えばBASE64で送る内容をWSDL上にスキーマで定義するのは難しいのではないでしょうか。 ということは、Java2WSDLのサポートもあまり期待できないと思います。 ためしにやってみて、<message>の内容がどうなっているか見てはどうでしょうか? ちなみに、JAXMで作ったWebサービスから自動的に的確なWSDLを作成するツールってあるのでしょうか? というか、実現できない?? | ||||
|
投稿日時: 2003-07-12 01:11
Axis でAttachmentを使うサンプルならば、samples\attachmentsに含まれているのですが、これでは駄目なのでしょうか?
ちなみにこのサンプルはJAAS準拠ではありません。 JAAS準拠のサンプルは以下に見つかります。 http://dev2dev.bea.com/code/websvcs.jsp この場合はHandlerを使うことになります。 AxisでのHandlerの設定方法はsamples\jaxrpc\helloを御覧下さい。 もう一つdocument styleのAPIを使う方法があります。 これはsamples\messageを見て下さい。 ちなみにAxisではJAXMのサーバは実装されていなかったと思います。 JAXMのクライアントを実装して呼び出すことは可能です。 AttachmentのWSDLについてはよく知らないのですが、DIMEであれば以下に説明がありました。DIMEはAxisでも実装することができます。 http://www.gotdotnet.com/team/xml_wsspecs/dime/WSDL-Extension-for-DIME.htm | ||||
|
投稿日時: 2003-07-12 10:00
Kanさん、いたちさん、お答えいただきありがとうございます。
samples\attachmentsのサンプルはclassファイルしかないから…と思っていましたが、 AXISのページにソースファイルやwsddがあったのでそれらを調べていきたいと思います。 | ||||
|
投稿日時: 2003-07-13 15:10
どうもUKです。
早速例のsamples\attachments例を参考に簡単なプログラムを作ってみましたが、エラーが 出てしまいます。 ----サーバー側(SimpleAttachmentsServices.java)------------------------ import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import javax.activation.DataHandler; public class SimpleAttachmentsServices { public boolean hello(String msg, DataHandler[] attachments){ if(attachments!=null){ for(int i=0;i<attachments.length;i++){ String fname = attachments[i].getName(); Object content = attachments[i].getContent(); } } return true; } } ---クライアント側(AttachmentClient.java)------------------------------ import org.apache.axis.client.Call; import org.apache.axis.client.Service; import org.apache.axis.encoding.XMLType; import org.apache.axis.encoding.ser.JAFDataHandlerDeserializerFactory; import org.apache.axis.encoding.ser.JAFDataHandlerSerializerFactory; import javax.xml.rpc.ParameterMode; import javax.xml.namespace.QName; import java.net.URL; import javax.activation.DataHandler; import javax.activation.FileDataSource; public class AttachmentClient { public static void main(String args[]) { Service service = null; Call call = null; String message = "succedd"; try { service = new Service(); call = (Call)service.createCall(); call.setTargetEndpointAddress(new URL(args[0])); call.setOperationName(new QName("SimpleAttachmentsServices", "hello")); QName qnameAttachment = new QName("SimpleAttachmentsServices", "DataHandler"); call.registerTypeMapping(DataHandler.class, qnameAttachment,JAFDataHandlerSerializerFactory.class,JAFDataHandlerDeserializerFactory.class); call.addParameter("msg", XMLType.XSD_STRING, ParameterMode.IN); call.addParameter("attachments", XMLType.SOAP_ARRAY,ParameterMode.IN); call.setReturnType(XMLType.XSD_BOOLEAN); call.setProperty(call.ATTACHMENT_ENCAPSULATION_FORMAT,call.ATTACHMENT_ENCAPSULATION_FORMAT_DIME); DataHandler dh = new DataHandler(new FileDataSource("attachments.txt")); Object ret = call.invoke(new Object[]{"message",new DataHandler[]{dh}}); } catch (Exception e) { e.printStackTrace(); } } } ---エラー---------------------------------------------------------------- - Mapping Exception to AxisFault AxisFault faultCode: {http://xml.apache.org/axis/}Server.userException faultString: org.xml.sax.SAXException: No deserializer defined for array type {SimpleAttachmentsServices}DataHandler faultActor: null faultDetail: stackTrace: org.xml.sax.SAXException: No deserializer defined for array type {SimpleAttachmentsServices}DataHandler ・ ・ ・ ・ ご教授宜しくお願いします。 | ||||
|
投稿日時: 2003-07-13 17:26
WSDDでtypeMappingを設定されていますか?
これもsamples\attachments\attachdeploy.wsddを参考にするとよいです。 |