2015-10-14 59 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生成的“存根”。如果你考虑这种方式,我可以提供一些代码,以帮助你。 –