0

@WebService アノテーションが付けられた StatelessSessionBean を JBoss にデプロイしています。JBoss によって生成された WSDL を使用して、クライアント スタブを生成しています。私の問題は、オブジェクトのリストを返すメソッドを呼び出すことです。リストが空の場合、呼び出しは成功しますが、リストが空でない場合、次の例外が発生します。

com.sun.xml.ws.encoding.soap.DeserializationException: Failed to read a response: javax.xml.bind.UnmarshalException
 - with linked exception:         
[javax.xml.bind.UnmarshalException: Unable to create an instance of com.companyname.api.ws.DataItemType                                                     
 - with linked exception:
[java.lang.InstantiationException]]
    at com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:124)
    at com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:89)
    at com.sun.xml.ws.client.sei.SEIStub.invoke(SEIStub.java:118)
    at $Proxy34.getWorkflows(Unknown Source)
    at com.companyname.api.SimpleClient.go(SimpleClient.java:48)

Web を検索すると、ここでこの議論が行われました: http://forums.java.net/jive/message.jspa?messageID=281780

ただし、 @XmlSeeAlso を正しく設定しており、生成されたスタブ クラスに存在します。DataItemType クラスが抽象であることを確認できたので、インスタンス化しようとすると問題が発生しても不思議ではありません。DataItemType クラスがインスタンス化されている理由がまったくわかりません (抽象的であるため)。これは、サーバーから返される XML です (私にはほぼ正しいように見えます)。

<env:Envelope xmlns:env='http://schemas.xmlsoap.org/soap/envelope/'>
    <env:Header></env:Header>
    <env:Body>
        <ns2:getWorkflowsResponse xmlns:ns2="http://ws.api.companyname.com/">
            <return>
                <id>
                    <identifier>1</identifier>
                    <version>0</version>
                </id>
                <goal>ENROLL</goal>
                <dataItemType xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="DataItemTypeText">
                    <attributeName>email</attributeName>
                    <displayName>Email Address</displayName>
                </dataItemType>
                ...
            </return>
        </ns2:getWorkflowsResponse>
    </env:Body>
</env:Envelope>

私が間違っていることを誰かが知っていますか?

4

1 に答える 1

0

生成された WSDL には多くの問題がありました (手作業で作成されたものではないことに注意してください)。この特定の例外がスローされた理由 (または、たとえば、誤った WSDL の生成時にエラーが発生しなかった理由) を示す、具体的な変更点はありませんでした。

有効な WSDL が作成されるように注釈を調整すると、使用していた JAX-WS バージョンにさらに問題が発生しました。最終的に JBoss で使用されるバージョンをアップグレードした結果、新しい JAX-WS jar を JRE 承認済みディレクトリに配置する必要が生じました。

この問題に対処するために私が行った具体的なことはなかったので、私が行ったことをこれ以上詳しく説明するつもりはありません。他の誰かがそれを見た場合は、WSDL を生成するために使用するアノテーションを非常に具体的にし、WSDL を注意深く調べることをお勧めします。

于 2010-09-02T19:25:27.107 に答える