简体   繁体   中英

jboss connect to another wsdl webservice

I builded a jboss webservice few month ago. This service work perfectly for the need of the moment.

Now, the client ask me to add some feature which is basicly connect to another different webservice to speed up follow up time. (basicly a jboss webservice have to connect another webserver somewhere on the network)

I have already a java code that I code for connect to this remote webservice(work well using JDK out of a Webservice... but just stacktrace in JBOSS context)

    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;
}

I tried to find some example of this on the web without success. So this is the trace log of 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

From my understanding, he try to create a service as his own... when he should try to access it via the url on the other server. It's probably just a config to add somewhere for telling this call is on another server. I have the a miminum configuration (no external jar out of those from jboss) and having just a 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>

So I'm asking here for see if someone know how to set an external wsdl in Jboss 7.1.1.Final.

Added: This is the client trace when I run the same code under a jdk (not in jboss webservice):

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.

This caused stack trace seems to be about the bad formed XML, and it is related to end of the file (EOF).

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

Try identify all the XML formed and whatch before send it, note that all the opened tags must be ended.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM