2011-08-29 56 views
4

我已經通過執行命令產生的JAX-WS客戶生成的文件在一個jar(clentjaxw.jar),我用它作爲導入的庫,在eclipse項目中進行一些測試。JAX-WS客戶問題

事實是,我能夠讓我的測試沒有問題,但是當我提供了一個collegue的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本地運行。而且我已經檢查過他沒有代理。

你對這個問題的原因有一些想法嗎?


更新: 我要補充新的細節:我已經發現,collegue能夠訪問,通過瀏覽到:http://localhost:8585/active-bpel/services/HealthMobilitySequence?wsdl,但如果他試圖訪問指向:http://127.0.0.1: 8585/active-bpel/services/HealthMobilitySequence?wsdl或者使用ip地址代替localhost失敗的IP地址。在我的機器上,我沒有這樣的問題,我可以訪問所有的可能性:本地主機,機器名稱,127.0.0.1,ipaddress。

所以我認爲這可能是問題,我的意思是我想通過java,url http://localhost:8585/active-bpel/services/HealthMobilitySequence被翻譯之前,打開一個Java套接字連接,在一個新的使用IP地址(或127.0.0.1)本地主機和訪問失敗。所以看起來問題是由於操作系統,因爲我們共享完全相同的配置作爲操作系統的一部分(在我的機器上贏得XP,在他的機器上贏得Vista)。

有些想法?由於


UPDATE:嗨再次,由於某種原因,更改計算機(通常是64位)的collegue解決了我所描述的問題。無論如何,他有另一個問題,不依賴於客戶端,因爲他也通過調用使用Eclipse Web瀏覽器經歷相同的。 例外的是以下內容: 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) 

請小心他打算調用的Web服務是部署在Tomcat 5.5.27中運行的ActiveBPEL(5.0.2版本)中的一個bpel流程。而且它的配置如下:OP:windows 7,jdk:1.6,arch:64位,而我的是:OP:windows xp,jdk:1.6,arch:32位。 你對這個問題有些想法嗎?

在此先感謝

+0

這聽起來像一個配置問題。我會檢查你的同事是否安裝了IPv4(有關詳細信息,請參閱[本文](http://serverfault.com/questions/4689))。 – McDowell

回答

1

我剛剛在構建和測試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)上創建一個自定義屬性。