2015-10-14 60 views
0

幾個月前我建立了一個jboss webservice。 這項服務完美適用於當下的需求。jboss連接到另一個wsdl webservice

現在,客戶端要求我添加一些基本連接到另一個不同web服務的功能,以加快跟進時間。 (基本上一個JBoss Web服務必須連接網絡上的另一個網絡服務器)

我已經有一個java代碼,我代碼連接到這個遠程web服務(很好的使用JDK的Web服務......但只是stacktrace JBOSS上下文)

public SOAPMessage callDownloadInterfaceWS(String processName, SOAPMessage soapRequest) throws Exception { 
    SOAPMessage response = null; 

    if (soapRequest == null) 
     throw new Exception("Empty request"); 

    //FactoryLogger.log("Create the dynamic invocation object from this service..."); 
    Dispatch<SOAPMessage> dispatch = soapService.createDispatch(port, SOAPMessage.class, Service.Mode.MESSAGE); 

    if (username != null) { 
     //login pass 
     dispatch.getRequestContext().put(BindingProvider.USERNAME_PROPERTY, username); 
     dispatch.getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, password); 
    } 

    if (soapaction != null) { 
     dispatch.getRequestContext().put(BindingProvider.SOAPACTION_USE_PROPERTY, Boolean.TRUE); 
     dispatch.getRequestContext().put(BindingProvider.SOAPACTION_URI_PROPERTY, soapaction); 
    } 

    dispatch.getRequestContext().put(BindingProvider.SESSION_MAINTAIN_PROPERTY, true); 

    if (processName != null) { 
     LOG.info("[" + processName + "] Invoke the service endpoint: " + wsdl); 
    } else { 
     LOG.info("Invoke the service endpoint: " + wsdl); 
    } 
    response = dispatch.invoke(soapRequest); 
    return response; 
} 

我試圖在網上找到一些沒有成功的例子。 所以,這是JBoss的跟蹤日誌:

12:25:50,380 INFO [org.apache.cxf.service.factory.ReflectionServiceFactoryBean] (http--0.0.0.0-8088-1) Creating Service {http://cx.blabla.com/cbserver}ServiceManager from class org.apache.cxf.jaxws.support.DummyImpl 
12:25:50,382 INFO [com.assistcenter.intercom.gateway.soap.SoapConnector] (http--0.0.0.0-8088-1) [cx_v6_sortie:B002054035] Invoke the service endpoint: http://dcobyb:12770/cbserver/Service/cbevent.wsdl 
12:25:50,396 WARNING [org.apache.cxf.phase.PhaseInterceptorChain] (http--0.0.0.0-8088-1) Interceptor for {http://cx.blabla.com/cbserver}ServiceName#{http://cxf.apache.org/jaxws/dispatch}Invoke has thrown exception, unwinding now: org.apache.cxf.binding.soap.SoapFault: Error reading XMLStreamReader. 
     at org.apache.cxf.binding.soap.interceptor.ReadHeadersInterceptor.handleMessage(ReadHeadersInterceptor.java:237) 
     at org.apache.cxf.binding.soap.interceptor.ReadHeadersInterceptor.handleMessage(ReadHeadersInterceptor.java:60) 
     at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:263) 
     at org.apache.cxf.endpoint.ClientImpl.onMessage(ClientImpl.java:795) 
     at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponseInternal(HTTPConduit.java:1626) 
     at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponse(HTTPConduit.java:1493) 
     at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1401) 
     at org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:56) 
     at org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:648) 
     at org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:62) 
     at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:263) 
     at org.apache.cxf.endpoint.ClientImpl.doInvoke(ClientImpl.java:531) 
     at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:461) 
     at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:364) 
     at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:317) 
     at org.apache.cxf.endpoint.ClientImpl.invokeWrapped(ClientImpl.java:352) 
     at org.apache.cxf.jaxws.DispatchImpl.invoke(DispatchImpl.java:381) 
     at org.apache.cxf.jaxws.DispatchImpl.invoke(DispatchImpl.java:241) 
     at com.assistcenter.intercom.gateway.soap.SoapConnector.callDownloadInterfaceWS(SoapConnector.java:144) [classes:] 
     at com.bell.it.bip.util.SmSoap.serviceManagerEventIn(SmSoap.java:45) [classes:] 
     at com.bell.ws.bnl.api.soap.BnlServiceManagerSoapHandler.sendServiceManagerEventIn(BnlServiceManagerSoapHandler.java:88) [classes:] 
     at com.bell.ws.bnl.api.impl.BnlServiceManagerImpl.updatePaymentConfig(BnlServiceManagerImpl.java:184) [classes:] 
     at com.bell.ws.bnl.xswitch.method.UpdatePaymentConfigMethod.execute(UpdatePaymentConfigMethod.java:49) [classes:] 
     at com.bell.ws.bnl.xswitch.method.UpdatePaymentConfigMethod.execute(UpdatePaymentConfigMethod.java:30) [classes:] 
     at com.bell.ws.bnl.xswitch.WebServiceMethodExecutor.execute(WebServiceMethodExecutor.java:29) [classes:] 
     at com.bell.ws.bnl.xswitch.servlet.BnlSoapBinding.updatePaymentConfig(BnlSoapBinding.java:132) [classes:] 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [rt.jar:1.7.0_25] 
     at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) [rt.jar:1.7.0_25] 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) [rt.jar:1.7.0_25] 
     at java.lang.reflect.Method.invoke(Unknown Source) [rt.jar:1.7.0_25] 
     at org.jboss.ws.common.invocation.AbstractInvocationHandlerJSE.invoke(AbstractInvocationHandlerJSE.java:111) 
     at org.jboss.wsf.stack.cxf.JBossWSInvoker._invokeInternal(JBossWSInvoker.java:181) 
     at org.jboss.wsf.stack.cxf.JBossWSInvoker.invoke(JBossWSInvoker.java:127) 
     at org.apache.cxf.interceptor.ServiceInvokerInterceptor$1.run(ServiceInvokerInterceptor.java:58) 
     at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [rt.jar:1.7.0_25] 
     at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source) [rt.jar:1.7.0_25] 
     at java.util.concurrent.FutureTask.run(Unknown Source) [rt.jar:1.7.0_25] 
     at org.apache.cxf.workqueue.SynchronousExecutor.execute(SynchronousExecutor.java:37) 
     at org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleMessage(ServiceInvokerInterceptor.java:106) 
     at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:263) 
     at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121) 
     at org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:207) 
     at org.jboss.wsf.stack.cxf.RequestHandlerImpl.handleHttpRequest(RequestHandlerImpl.java:91) 
     at org.jboss.wsf.stack.cxf.transport.ServletHelper.callRequestHandler(ServletHelper.java:169) 
     at org.jboss.wsf.stack.cxf.CXFServletExt.invoke(CXFServletExt.java:87) 
     at org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:185) 
     at org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPost(AbstractHTTPServlet.java:108) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:754) [jboss-servlet-api_3.0_spec-1.0.0.Final.jar:1.0.0.Final] 
     at org.jboss.wsf.stack.cxf.CXFServletExt.service(CXFServletExt.java:135) 
     at org.jboss.wsf.spi.deployment.WSFServlet.service(WSFServlet.java:140) [jbossws-spi-2.0.3.GA.jar:2.0.3.GA] 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:847) [jboss-servlet-api_3.0_spec-1.0.0.Final.jar:1.0.0.Final] 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:329) [jbossweb-7.0.13.Final.jar:] 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.13.Final.jar:] 
     at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275) [jbossweb-7.0.13.Final.jar:] 
     at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161) [jbossweb-7.0.13.Final.jar:] 
     at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:153) [jboss-as-web-7.1.1.Final.jar:7.1.1.Final] 
     at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:155) [jbossweb-7.0.13.Final.jar:] 
     at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) [jbossweb-7.0.13.Final.jar:] 
     at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) [jbossweb-7.0.13.Final.jar:] 
     at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:368) [jbossweb-7.0.13.Final.jar:] 
     at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877) [jbossweb-7.0.13.Final.jar:] 
     at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:671) [jbossweb-7.0.13.Final.jar:] 
     at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:930) [jbossweb-7.0.13.Final.jar:] 
     at java.lang.Thread.run(Unknown Source) [rt.jar:1.7.0_25] 
Caused by: com.ctc.wstx.exc.WstxEOFException: Unexpected EOF in prolog 
at [row,col {unknown-source}]: [1,0] 
     at com.ctc.wstx.sr.StreamScanner.throwUnexpectedEOF(StreamScanner.java:677) 
     at com.ctc.wstx.sr.BasicStreamReader.handleEOF(BasicStreamReader.java:2104) 
     at com.ctc.wstx.sr.BasicStreamReader.nextFromProlog(BasicStreamReader.java:2010) 
     at com.ctc.wstx.sr.BasicStreamReader.next(BasicStreamReader.java:1102) 
     at com.ctc.wstx.sr.BasicStreamReader.nextTag(BasicStreamReader.java:1125) 
     at org.apache.cxf.binding.soap.interceptor.ReadHeadersInterceptor.handleMessage(ReadHeadersInterceptor.java:138) 
     ... 63 more 

從我的理解,他試圖創建一個服務作爲自己......當他應該嘗試通過URL來訪問它在其他服務器上。 這可能只是一個配置添加某處告訴這個電話是在另一臺服務器上。 我有一個miminum配置(沒有來自jboss的外部jar),只有一個web.xml。

(web.xml) 
<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> 
    <description>BnlService</description> 
    <display-name>BnlService</display-name> 
    <welcome-file-list> 
    <welcome-file> 
     index.html 
    </welcome-file> 
    </welcome-file-list> 
    <servlet> 
    <servlet-name>BnlService</servlet-name> 
    <servlet-class>com.bell.ws.bnl.xswitch.servlet.BnlSoapBinding</servlet-class> 
    </servlet> 
    <servlet-mapping> 
    <servlet-name>BnlService</servlet-name> 
    <url-pattern>/WebServices/BnlWS</url-pattern> 
    </servlet-mapping> 
    <session-config> 
    <session-timeout>360</session-timeout> 
    </session-config> 
</web-app> 

所以我在這裏問這裏是否有人知道如何設置外部wsdl在Jboss 7.1.1.Final。

補充: 這是客戶跟蹤,當我(在JBoss的web服務)一個JDK下運行相同的代碼:

C:\Program Files\Java\jdk1.6.0_20\bin\javaw.exe" -client -classpath K:\Bnl\classes;K:\Bnl\lib\commons-lang-2.3.jar;K:\Bnl\lib\commons-logging.jar;K:\Bnl\lib-oracle\ojdbc14.jar;K:\Bnl\lib-oracle\ojdbc6.jar;K:\Bnl\jboss7.1.1-lib\jbosgi-http-api-1.0.5.jar;K:\Bnl\lib-mail\javax.mail.jar com.bell.ws.bnl.api.impl.BnlServiceManagerImpl 
2015-10-14 12:11:32 com.bell.ws.bnl.api.impl.BnlServiceManagerImpl updatePaymentConfig 
INFO: updatePaymentConfig - [TEST] Record Test,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 
2015-10-14 12:11:32 com.bell.ws.bnl.api.soap.BnlServiceManagerSoapHandler readProperty 
INFO: First init - Load config file: bnl-soap.config 
2015-10-14 12:11:32 com.assistcenter.intercom.gateway.soap.SoapConnector <init> 
INFO: Define the SOAP service... 
2015-10-14 12:11:32 com.bell.it.bip.util.SmSoap serviceManagerEventIn 
INFO: <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:pws="http://cx.blabla.com/cxserver" xmlns:com="http://cx.blabla.com/cxserver/Common"> 
    <soapenv:Header/> 
    <soapenv:Body> 
     <pws:EventProcessingRequest> 
     <pws:event etype="event"> 
      <pws:type>cx_v6_sortie</pws:type> 
      <pws:user>Bip</pws:user> 
      <pws:record>Test^2^3^4^5^6^7^8^9^10^11^12^13^14^15^16^17^18^</pws:record> 
     </pws:event> 
     </pws:EventProcessingRequest> 
    </soapenv:Body> 
</soapenv:Envelope> 
2015-10-14 12:11:32 com.assistcenter.intercom.gateway.soap.SoapConnector callDownloadInterfaceWS 
INFO: [cx_v6_sortie:Test] Invoke the service endpoint: http://dcobyb:12770/cbserver/Service/cbevent.wsdl 
Process exited with exit code 0. 

回答

0

這導致堆棧跟蹤似乎是對壞的XML,它與文件結尾(EOF)有關。

Caused by: com.ctc.wstx.exc.WstxEOFException: Unexpected EOF in prolog 

嘗試標識發送之前形成的所有XML和whatch,注意所有打開的標記必須結束。

+0

這不是一個糟糕的XML。我可以運行與客戶端相同的代碼,並且工作良好。這說明了我爲他嘗試創建一個服務來尋找他什麼都不知道的事實。輸入將爲空,並且輸出null可能導致WstxEOFException。 – user5446088

+0

除非web服務需要實例來對其他服務需要知道的對象。我沒有定義關於此服務的「定義」或「導入」或「xsd對象」,因爲我除了他能夠像客戶端那樣生成SOAPMessage外。 – user5446088

+0

也許你調用web服務進入你的應用程序的方式並不是最合適的,也許它可以很好地調用客戶端。當我想要使用外部Web服務時,我只使用由SoapUI生成的「存根」。如果你考慮這種方式,我可以提供一些代碼,以幫助你。 –