- - PR -
AXISでWSDL2Javaが失敗する
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2006-09-17 03:12
こんばんは。初めて投稿させていただきます。
Java1.5とApache AXIS 1.4を用いて、Webサービスアプリケーションを作成しています。 サーバにデプロイした後にWSDL2Javaでプロキシコードを生成する部分でエラーが出てしまい、試行錯誤しても解決しないため、皆さんのお知恵をお借りしようと投稿しました。 このアプリケーションでは、サーバ/クライアント間でBeanではない自作のクラス(MyClass)を相互にやり取りすることを想定しています。 これまでのところ、自作のクラス用に専用の(デ)シリアライザとそのファクトリを作成し、AdminClientでサーバーにデプロイするところまではエラーは生じておりません。 しかし、WSDL2Javaを実行すると、以下のエラーが発生します。 -----------------------------------------------------------------------------java.io.IOException: Type {urn:sample}MyClass は参照されますが未定義です / [en]-(Type {urn:sample}MyClass is referenced but not defined.) at org.apache.axis.wsdl.symbolTable.SymbolTable.checkForUndefined(SymbolTable.java:665) at org.apache.axis.wsdl.symbolTable.SymbolTable.add(SymbolTable.java:545) at org.apache.axis.wsdl.symbolTable.SymbolTable.populate(SymbolTable.java:518) at org.apache.axis.wsdl.symbolTable.SymbolTable.populate(SymbolTable.java:495) at org.apache.axis.wsdl.gen.Parser$WSDLRunnable.run(Parser.java:361) at java.lang.Thread.run(Unknown Source) ----------------------------------------------------------------------------- なお、デプロイに用いるWSDDファイルは以下のものです。 ----------------------------------------------------------------------------- <deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java" xmlns:myNS="urn:sample"> <service name="sample" provider="java:RPC"> <namespace>urn:sample</namespace> <parameter name="className" value="sample.api.MyClass"/> <parameter name="allowedMethods" value="*"/> <typeMapping qname="myNS:sample" type="java:sample.api.MyClass" serializer="sample.api.MyClassSerializerFactory" deserializer="sample.api.MyClassDeserializerFactory" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" /> </service> </deployment> ----------------------------------------------------------------------------- 最後に、クラス構成は以下のようになっています。 sample + api + MyClassProxy --- サーバ側との間でMyClassのオブジェクトを送受信するクラス + MyClass --- データ格納用クラス + MyClassSerializer + MyClassSerializerFactory + MyClassDeserializer + MyClassDeserializerFactory 以上、よろしくお願いいたします。 |
|
投稿日時: 2006-09-19 10:57
失敗しているのはWSDL2Javaですよね? であれば、WSDDファイルを見ても原因はわから
ないと思いますが… WSDLファイルを載せてみてもらえないでしょうか。 |
|
投稿日時: 2006-09-22 19:21
uk様
ご返答ありがとうございます。 また、返信が遅くなり申し訳ありません。 WSDLファイルは自動生成で以下のものが出力されました。 --- sample.wsdl -------------------------------------------------------------------- <?xml version="1.0" encoding="UTF-8" ?> <wsdl:definitions targetNamespace="http://localhost:8080/axis/services/sample" xmlns:apachesoap="http://xml.apache.org/xml-soap" xmlns:impl="http://localhost:8080/axis/services/sample" xmlns:intf="http://localhost:8080/axis/services/sample" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns1="http://localhost:8080/axis/" 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="http://localhost:8080/axis/services/sample" xmlns="http://www.w3.org/2001/XMLSchema"> <import namespace="http://localhost:8080/axis/" /> <import namespace="http://xml.apache.org/xml-soap" /> <import namespace="http://schemas.xmlsoap.org/soap/encoding/" /> <complexType name="MyException"> <sequence /> </complexType> <complexType name="ArrayOf_xsd_anyType"> <complexContent> <restriction base="soapenc:Array"> <attribute ref="soapenc:arrayType" wsdl:arrayType="xsd:anyType[]" /> </restriction> </complexContent> </complexType> </schema> <schema targetNamespace="http://xml.apache.org/xml-soap" xmlns="http://www.w3.org/2001/XMLSchema"> <import namespace="http://localhost:8080/axis/" /> <import namespace="http://localhost:8080/axis/services/sample" /> <import namespace="http://schemas.xmlsoap.org/soap/encoding/" /> <complexType name="Vector"> <sequence> <element maxOccurs="unbounded" minOccurs="0" name="item" type="xsd:anyType" /> </sequence> </complexType> </schema> </wsdl:types> <wsdl:message name="getMyClassRequest"> <wsdl:part name="in0" type="tns1:MyClass" /> <wsdl:part name="in1" type="xsd:string" /> </wsdl:message> <wsdl:message name="getMyClassResponse"> <wsdl:part name="getMyClassReturn" type="xsd:anyType" /> </wsdl:message> <wsdl:message name="MyException"> <wsdl:part name="fault" type="impl:MyException" /> </wsdl:message> <wsdl:portType name="MyClassOperation"> <wsdl:operation name="getMyClass" parameterOrder="in0 in1"> <wsdl:input message="impl:getMyClassRequest" name="getMyClassRequest" /> <wsdl:output message="impl:getMyClassResponse" name="getMyClassResponse" /> <wsdl:fault message="impl:MyException" name="MyException" /> </wsdl:operation> </wsdl:portType> <wsdl:binding name="sampleSoapBinding" type="impl:MyClassOperation"> <wsdlsoap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http" /> <wsdl:operation name="getMyClass"> <wsdlsoap:operation soapAction="" /> <wsdl:input name="getMyClassRequest"> <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://api.sample.toplib.com" use="encoded" /> </wsdl:input> <wsdl:output name="getMyClassResponse"> <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://localhost:8080/axis/services/sample" use="encoded" /> </wsdl:output> <wsdl:fault name="MyException"> <wsdlsoap:fault encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" name="MyException" namespace="http://localhost:8080/axis/services/sample" use="encoded" /> </wsdl:fault> </wsdl:operation> </wsdl:binding> <wsdl:service name="MyClassOperationService"> <wsdl:port binding="impl:sampleSoapBinding" name="sample"> <wsdlsoap:address location="http://localhost:8080/axis/services/sample" /> </wsdl:port> </wsdl:service> </wsdl:definitions> ----------------------------------------------------------------------------- 上記生成されたファイルには(デ)シリアライズについての情報がないようですが、具体的にどうすれば良いのか分からない状態です。 もし何か原因があるようでしたら、ご教授願えればと思います。 |
1