- PR -

WSDL2JavaツールでQname,NameSpaceを含んだソースが生成されない

1
投稿者投稿内容
未記入
ベテラン
会議室デビュー日: 2005/02/24
投稿数: 55
投稿日時: 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/02/24
投稿数: 55
投稿日時: 2005-05-13 17:06
追記

beanMappingでしているeasi.axis.Dataクラスが
WSDL2Javaで生成されないのが悪いような気がしてるんですが・・・

でもDataを別サービスとして登録することによって、
Dataクラスのスタブを生成しても、同じエラーになるんですけど。

1

スキルアップ/キャリアアップ(JOB@IT)