我将用@WebService注释的StatelessSessionBean部署到JBoss。我将JBoss生成的WSDL生成客户端存根。我的问题是调用返回对象列表的方法。但是,如果列表是空的调用成功,如果列表不为空,然后我得到以下异常:Web服务客户端调用部署到JBoss的Web服务中的InstantiationException
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)
搜索网络使我这个讨论在这里: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>
有没有人知道我在做什么错?
我有同样的问题,不知道如何解决它。 – Krishna 2013-11-25 08:58:27
奎师那你能给我更多的细节吗?我不知道它是否具体相关,但尝试不同的JAX-WS版本可能是值得的。也只是非常小心的注释(并意识到不同的版本将以不同的方式处理它们)可能会有所帮助。 – macbutch 2013-11-26 02:46:10
雅我只使用JAX-WS,并且我正在制作一个Pojo类并将该类作为返回类型放入另一个类中。当我试图让这个类的webservice显示这个错误。它就像当我给返回类型那个类然后它的显示错误,如“返回类型不支持,可能会导致错误或导致数据丢失。”这就像我正在得到的那个错误。 – Krishna 2013-11-26 04:54:38