- - PR -
WSDL2JavaツールでQname,NameSpaceを含んだソースが生成されない
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2005-05-13 15:52
現在Axisでクライアント側からWebサービスを利用する処理を行ってます。
Webサービスを呼び出す際は、ユーザ定義のクラスをパラメータとして渡します。 なのでwsddファイルには以下のようにBeanMapping要素を記述しています。 【deploy.wsdd】 <deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"> <service name="echo" provider="java:RPC"> <parameter name="className" value="easi.axis.Echo"/> <parameter name="allowedMethods" value="*"/> <beanMapping qname="myNS:Data" xmlns:myNS="urn:Echo" languageSpecificType="java:easi.axis.Data"/> </service> </deployment> これをデプロイすると、下部記載のWSDLがWebサービスに登録されます。 これからWSDL2JavaツールでJavaスタブコードを生成すると、 EchoSoapBindingStub.javaが生成されますが、この中では WSDDファイルのときに書いたqname="myNS:Data" xmlns:myNS="urn:Echo" に関する記述が全く出力されません。 なので手作業でEchoSoapBindingStub.javaに [CODE] QName qn = new QName( "urn:Echo", "Data" ); _call.registerTypeMapping(Data.class, qn, new org.apache.axis.encoding.ser.BeanSerializerFactory(Data.class, qn), new org.apache.axis.encoding.ser.BeanDeserializerFactory(Data.class, qn)); [CODE] を記述しなければ http://xml.apache.org/axis/}stackTrace: java.io.IOException: No serializer found for class easi.axis.client.DataSoapBindingStub in registry org.apache.axis.encoding.TypeMappingImpl@15093f1 というエラーが出てしまいます。 もしこの現象について詳しい方がおりましたら ぜひ対処方法などを教えてください。 【WSDL】 <?xml version="1.0" encoding="UTF-8"?> <wsdl:definitions targetNamespace="http://localhost:8080/easi/servlet/AxisServlet/echo" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:apachesoap="http://xml.apache.org/xml-soap" xmlns:impl="http://localhost:8080/easi/servlet/AxisServlet/echo" xmlns:intf="http://localhost:8080/easi/servlet/AxisServlet/echo" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns1="urn:Echo" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><wsdl:types><schema targetNamespace="urn:Echo" xmlns="http://www.w3.org/2001/XMLSchema"><import namespace="http://schemas.xmlsoap.org/soap/encoding/"/><complexType name="Data"><sequence><element name="date" nillable="true" type="xsd:dateTime"/><element name="name" nillable="true" type="xsd:string"/></sequence></complexType></schema><schema targetNamespace="http://xml.apache.org/xml-soap" xmlns="http://www.w3.org/2001/XMLSchema"><import namespace="http://schemas.xmlsoap.org/soap/encoding/"/><complexType name="mapItem"><sequence><element name="key" nillable="true" type="xsd:string"/><element name="value" nillable="true" type="xsd:string"/></sequence></complexType><complexType name="Map"><sequence><element maxOccurs="unbounded" minOccurs="0" name="item" type="apachesoap:mapItem"/></sequence></complexType></schema></wsdl:types> <wsdl:message name="sayEchoRequest"> <wsdl:part name="message" type="apachesoap:Map"/> </wsdl:message> <wsdl:message name="sayEchoResponse"> <wsdl:part name="sayEchoReturn" type="apachesoap:Map"/> </wsdl:message> <wsdl:portType name="Echo"> <wsdl:operation name="sayEcho" parameterOrder="message"> <wsdl:input message="impl:sayEchoRequest" name="sayEchoRequest"/> <wsdl:output message="impl:sayEchoResponse" name="sayEchoResponse"/> </wsdl:operation> </wsdl:portType> <wsdl:binding name="echoSoapBinding" type="impl:Echo"> <wsdlsoap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/> <wsdl:operation name="sayEcho"> <wsdlsoap:operation soapAction=""/> <wsdl:input name="sayEchoRequest"> <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://axis.easi" use="encoded"/> </wsdl:input> <wsdl:output name="sayEchoResponse"> <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://localhost:8080/easi/servlet/AxisServlet/echo" use="encoded"/> </wsdl:output> </wsdl:operation> </wsdl:binding> <wsdl:service name="EchoService"> <wsdl:port binding="impl:echoSoapBinding" name="echo"> <wsdlsoap:address location="http://localhost:8080/easi/services/echo"/> </wsdl:port> </wsdl:service> </wsdl:definitions> |
|
投稿日時: 2005-05-13 17:06
追記
beanMappingでしているeasi.axis.Dataクラスが WSDL2Javaで生成されないのが悪いような気がしてるんですが・・・ でもDataを別サービスとして登録することによって、 Dataクラスのスタブを生成しても、同じエラーになるんですけど。 |
1