проблема клиента jax-ws - PullRequest
       1

проблема клиента jax-ws

4 голосов
/ 29 августа 2011

Я создал клиента jax-ws, выполнив команду:

C:\wsdl>wsimport -keep -verbose -d generated HealthMobilitySequenceArtifacts.wsdl

Адрес службы в файле wsdl:

    soap:address location="http://localhost:8585/active-bpel/services/HealthMobilitySequence

Что ж, я упаковал сгенерированные файлы в jar (clentjaxw.jar) и использую его как импортированную библиотеку в проекте eclipse для проведения некоторых тестов.

Дело в том, что я могу выполнять свои тесты без проблем, но когда я предоставляю коллеге clientjaxw.jar, он имеет следующую ошибку во время выполнения:

    Exception in thread "main" com.sun.xml.internal.ws.client.ClientTransportException: HTTP transport error: java.net.ConnectException: Connection refused: connect
        at com.sun.xml.internal.ws.transport.http.client.HttpClientTransport.getOutput(Unknown Source)
        at com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.process(Unknown Source)
        at com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.processRequest(Unknown Source)
        at com.sun.xml.internal.ws.transport.DeferredTransportPipe.processRequest(Unknown Source)
        at com.sun.xml.internal.ws.api.pipe.Fiber.__doRun(Unknown Source)
        at com.sun.xml.internal.ws.api.pipe.Fiber._doRun(Unknown Source)
        at com.sun.xml.internal.ws.api.pipe.Fiber.doRun(Unknown Source)
        at com.sun.xml.internal.ws.api.pipe.Fiber.runSync(Unknown Source)
        at com.sun.xml.internal.ws.client.Stub.process(Unknown Source)
        at com.sun.xml.internal.ws.client.sei.SEIStub.doProcess(Unknown Source)
        at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(Unknown Source)
        at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(Unknown Source)
        at com.sun.xml.internal.ws.client.sei.SEIStub.invoke(Unknown Source)
        at $Proxy29.bookTreatment(Unknown Source)
        at test.TestJaxWS.main(TestJaxWS.java:32)
    Caused by: java.net.ConnectException: Connection refused: connect
        at java.net.PlainSocketImpl.socketConnect(Native Method)
        at java.net.PlainSocketImpl.doConnect(Unknown Source)
        at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
        at java.net.PlainSocketImpl.connect(Unknown Source)
        at java.net.SocksSocketImpl.connect(Unknown Source)
        at java.net.Socket.connect(Unknown Source)
        at java.net.Socket.connect(Unknown Source)
        at sun.net.NetworkClient.doConnect(Unknown Source)
        at sun.net.www.http.HttpClient.openServer(Unknown Source)
        at sun.net.www.http.HttpClient.openServer(Unknown Source)
        at sun.net.www.http.HttpClient.(Unknown Source)
        at sun.net.www.http.HttpClient.New(Unknown Source)
        at sun.net.www.http.HttpClient.New(Unknown Source)
        at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(Unknown Source)
        at sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Source)
        at sun.net.www.protocol.http.HttpURLConnection.connect(Unknown Source)
        at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(Unknown Source)
        ... 15 more

Я не понимаю проблемы: тем не менее, коллега может визуализировать сервис в браузере по этому адресу, а также запустить ping localhost. Более того, я проверил, что он не за прокси.

У вас есть идеи по поводу причины проблемы?


UPDATE: Я должен добавить новые детали: я обнаружил, что коллега может получить доступ через браузер к: http://localhost:8585/active-bpel/services/HealthMobilitySequence?wsdl, но если он пытается получить доступ к: http://127.0.0.1:8585/active-bpel/services/HealthMobilitySequence?wsdl или к тому же URL-адресу с IP-адресом в место localhost ему не удается. На моей машине такой проблемы нет, я могу получить доступ ко всем возможностям: localhost, имя машины, 127.0.0.1, ipaddress.

Так что я думаю, что это может быть проблемой. Я имею в виду, что через java URL http://localhost:8585/active-bpel/services/HealthMobilitySequence перед открытием соединения через сокет java преобразуется в новый с использованием IP-адреса (или 127.0.0.1). ) на месте localhost и доступ не удается. Таким образом, похоже, что проблема связана с операционной системой, так как мы разделяем одну и ту же конфигурацию с операционной системой (win xp на моей машине, vista на его).

Есть идеи? Спасибо


ОБНОВЛЕНИЕ: еще раз привет, по какой-то причине меняя машину (всегда 64-битную), коллега решил проблему, которую я описал. В любом случае, у него есть другая проблема, которая не зависит от клиента, поскольку он испытал то же самое, вызвав использование eclipse web explorer. Исключение составляют следующие: java.lang.ClassCastException: com.sun.xml.internal.messaging.saaj.soap.ver1_1.Envelope1_1Impl не может быть приведен к java.lang.String

    org.apache.axis.SOAPPart.getAsString(SOAPPart.java:554)

    org.apache.axis.SOAPPart.writeTo(SOAPPart.java:322)

    org.apache.axis.SOAPPart.writeTo(SOAPPart.java:269)

    org.apache.axis.Message.writeTo(Message.java:539)

    org.apache.axis.transport.http.AxisServlet.sendResponse(AxisServlet.java:902)

    org.apache.axis.transport.http.AxisServlet.doPost(AxisServlet.java:777)

    javax.servlet.http.HttpServlet.service(HttpServlet.java:647)

    org.apache.axis.transport.http.AxisServletBase.service(AxisServletBase.java:327)

    javax.servlet.http.HttpServlet.service(HttpServlet.java:729)

Пожалуйста, позаботьтесь о том, чтобы веб-сервис, который он пытается вызвать, был одним из процессов bpel, развернутых в ActiveBPEL (версия 5.0.2), запущенных в Tomcat 5.5.27. Кроме того, его конфигурация следующая: OP: windows 7, jdk: 1.6, arch: 64-битная, а шахта: OP: windows xp, jdk: 1.6, arch: 32-битная. У вас есть представление о проблеме?

Заранее спасибо

1 Ответ

1 голос
/ 07 апреля 2012

Я только что столкнулся с этой проблемой при создании и тестировании кода ActiveBPEL. Моим решением было явное сопоставление java.xml.soap.MessageFactory с реализацией Axis. Это позволяет избежать несовместимости между двумя стеками SOAP.

Сопоставление можно выполнить несколькими различными способами.

  1. Использовать системное свойство -Djavax.xml.soap.MessageFactory = org.apache.axis.soap.MessageFactoryImpl
  2. Включите заводской файл в classpath: /META-INF/javax.xml.soap.MessageFactory, где содержимое этого файла представляет собой одну строку текста: org.apache.axis.soap.MessageFactoryImpl

Если вы создаете источник AE, последний является предпочтительным механизмом и может быть добавлен в проект org.activebpel.rt.axis.bpel. Если вы используете двоичные файлы, вам, вероятно, потребуется создать собственное свойство в сценарии запуска для вашего контейнера (Tomcat / Jetty).

...