2010-08-20 100 views
0

我将用@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> 

有没有人知道我在做什么错?

回答

0

有一些与生成WSDL问题(请注意,这不是一个手工制作的一个)。没有什么特别的,我改变了,这表明为什么抛出了这个特殊的异常(或者为什么,例如,当生成不正确的WSDL时没有失败)。

一旦我调整了注解,一个有效的WSDL创建然后我有我使用其JAX-WS版本的更多问题。我最终升级了JBoss使用的版本,这又导致我需要将新的JAX-WS jar放入我的JRE认可的目录中。

我不会细节我在任何更多的细节做了,因为是我这样做,解决了这个问题没有具体的事情。如果有人看到它,我会建议您在用于生成WSDL的注释中非常具体,并仔细查看您的WSDL。

+0

我有同样的问题,不知道如何解决它。 – Krishna 2013-11-25 08:58:27

+0

奎师那你能给我更多的细节吗?我不知道它是否具体相关,但尝试不同的JAX-WS版本可能是值得的。也只是非常小心的注释(并意识到不同的版本将以不同的方式处理它们)可能会有所帮助。 – macbutch 2013-11-26 02:46:10

+0

雅我只使用JAX-WS,并且我正在制作一个Pojo类并将该类作为返回类型放入另一个类中。当我试图让这个类的webservice显示这个错误。它就像当我给返回类型那个类然后它的显示错误,如“返回类型不支持,可能会导致错误或导致数据丢失。”这就像我正在得到的那个错误。 – Krishna 2013-11-26 04:54:38