@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>
私が間違っていることを誰かが知っていますか?