Web服务客户端中的InstantiationException调用部署到JBoss的Web Service

时间:2010-08-20 00:23:32

标签: web-services jboss jax-ws jaxb2

我正在将一个使用@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)

在网上搜索引导我进行此讨论: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>

有谁知道我做错了什么?

1 个答案:

答案 0 :(得分:0)

生成的WSDL存​​在许多问题(请注意,它不是手工制作的)。我没有更改任何特定内容,这表明为什么抛出了这个特殊异常(或者为什么,例如,生成错误的WSDL时没有失败)。

一旦我调整了注释以便创建了有效的WSDL,那么我还有其他问题,即我正在使用的JAX-WS版本。我最终升级了JBoss使用的版本,这反过来导致我需要将更新的JAX-WS jar放在我的JRE背书目录中。

我不打算详细说明我所做的更详细,因为没有具体的事情可以解决这个问题。如果其他人看到它,我会建议您在用于生成WSDL的注释中非常具体,并仔细查看您的WSDL。