- PR -

AXISでWSDL2Javaが失敗する

1
投稿者投稿内容
あずま
会議室デビュー日: 2006/09/17
投稿数: 2
投稿日時: 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

以上、よろしくお願いいたします。
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2006-09-19 10:57
失敗しているのはWSDL2Javaですよね? であれば、WSDDファイルを見ても原因はわから
ないと思いますが… WSDLファイルを載せてみてもらえないでしょうか。
あずま
会議室デビュー日: 2006/09/17
投稿数: 2
投稿日時: 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

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