InstantiationException в клиенте веб-службы, вызывающем веб-службу, развернутую в JBoss - PullRequest
0 голосов
/ 20 августа 2010

Я развертываю StatelessSessionBean, аннотированный @WebService, для JBoss.Я использую WSDL, сгенерированный JBoss для создания заглушек клиента.Моя проблема заключается в вызове метода, который возвращает список объектов.Если список пуст, вызов успешен, однако, если список не пуст, я получаю следующее исключение:

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 голосов
/ 02 сентября 2010

Было несколько проблем с сгенерированным WSDL (обратите внимание, что это не было сделано вручную).Я ничего не изменил, что указывало на то, почему было сгенерировано именно это исключение (или почему, например, не возникла ошибка при создании неправильного WSDL).

После того, как я настроил аннотации так, чтобы действительныеWSDL был создан тогда, у меня были дальнейшие проблемы, какие версии JAX-WS я использовал.Я закончил тем, что обновил версию, используемую JBoss, что, в свою очередь, привело к необходимости помещать более новые JAX-WS jar в мой одобренный каталог JRE.

Я не буду подробно останавливаться на том, что я делал большеподробно, так как не было конкретной вещи, которую я сделал, чтобы решить эту проблему.Если кто-то еще увидит это, я бы посоветовал быть очень конкретным в аннотациях, которые вы используете для генерации WSDL, и внимательно посмотреть на ваш WSDL.

...