幾個月前我建立了一個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.
這不是一個糟糕的XML。我可以運行與客戶端相同的代碼,並且工作良好。這說明了我爲他嘗試創建一個服務來尋找他什麼都不知道的事實。輸入將爲空,並且輸出null可能導致WstxEOFException。 – user5446088
除非web服務需要實例來對其他服務需要知道的對象。我沒有定義關於此服務的「定義」或「導入」或「xsd對象」,因爲我除了他能夠像客戶端那樣生成SOAPMessage外。 – user5446088
也許你調用web服務進入你的應用程序的方式並不是最合適的,也許它可以很好地調用客戶端。當我想要使用外部Web服務時,我只使用由SoapUI生成的「存根」。如果你考慮這種方式,我可以提供一些代碼,以幫助你。 –