Hi JB,

   GET is OK, but most of SOAP messges should be sent using POST, how can I
make POST method working within http component? or I have to use Tomcat
instead of Jetty?

Thanks,
Long


Jean-Baptiste Onofré wrote:
> 
> Yes,
> 
> I think that if you make a HTTP request using GET method, it should work.
> 
> Regards
> JB
> 
> laolong wrote:
>> 
>> Hi JB,
>> 
>>    Now I believe the problem is caused by HTTP component/Jetty issue, the
>> HTTP component cannot get POST data from HTTP request.  
>>    1. I create a SOAP marshaler and overwrite function createExchange
>> using
>> the source code from
>> org.apache.servicemix.http.endpoints.HttpSoapConsumerMarshaler.java like
>> below and remove REQUESt method checking (in red), then I can get correct
>> SOAP response from XMLSpy.
>> 
>> public MessageExchange createExchange(HttpServletRequest request,
>>                      ComponentContext context) throws Exception {
>>              String method = request.getMethod();
>>              System.out.println(method);
>>              Message msg = super.getBinding().createMessage();
>>              msg.put(ComponentContext.class, context);
>>              msg.put(JbiConstants.USE_JBI_WRAPPER, super.isUseJbiWrapper());
>>              msg.put(Message.CONTENT_TYPE, request.getContentType());
>>              Map<String, String> headers = msg.getTransportHeaders();
>>              for (Enumeration<?> e = request.getHeaderNames(); 
>> e.hasMoreElements();)
>> {
>>                      String name = (String) e.nextElement();
>>                      String value = request.getHeader(name);
>>                      headers.put(name, value);
>>              }
>>              headers.put(HttpConstants.REQUEST_URI, request.getRequestURL()
>>                              .toString());
>>              headers.put(HttpConstants.CONTENT_TYPE, 
>> request.getContentType());
>>              headers.put(HttpConstants.REQUEST_METHOD, method);
>> //           if (HttpConstants.METHOD_POST.equals(method)
>> //                           || HttpConstants.METHOD_PUT.equals(method)) {
>>                      msg.setContent(InputStream.class, 
>> request.getInputStream());
>> //           }
>>              request.setAttribute(Message.class.getName(), msg);
>>              InterceptorChain phase = getChain(Phase.ServerIn);
>>              phase.doIntercept(msg);
>>              return msg.getContent(MessageExchange.class);
>> 
>>      }
>>    2. I also tried to use <http:endpoint>, it also get following error
>> message
>> 
>>    <pre>org.apache.cxf.interceptor.Fault: no jbi message element
>>      at
>> org.apache.cxf.binding.jbi.interceptor.JBIWrapperInInterceptor.handleMessage(JBIWrapperInInterceptor.java:102)
>>      at
>> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:236)
>>      at
>> org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:89)
>>      at
>> org.apache.cxf.transport.jbi.JBIDispatcherUtil.dispatch(JBIDispatcherUtil.java:156)
>>      at
>> org.apache.servicemix.cxfse.CxfSeEndpoint.process(CxfSeEndpoint.java:364)
>>      at
>> org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:627)
>>      at
>> org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:581)
>>      at
>> org.apache.servicemix.common.AsyncBaseLifeCycle.onMessageExchange(AsyncBaseLifeCycle.java:535)
>>      at
>> org.apache.servicemix.common.SyncLifeCycleWrapper.onMessageExchange(SyncLifeCycleWrapper.java:60)
>>      at
>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:623)
>>      at
>> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:172)
>>      at
>> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:168)
>>      at
>> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
>>      at
>> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650)
>>      at
>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)
>>      at java.lang.Thread.run(Thread.java:595)
>> </pre>
>> 
>> 
>> Thanks.
>> Long
>> 
>> 
>> 
>> Jean-Baptiste Onofré wrote:
>>> OK,
>>>
>>> The NullPointerException is raised into the Soap marshaler.
>>>
>>> Could you make a quick test using the "old" HTTP endpoint like this:
>>>     <http:endpoint service="service"
>>>                    endpoint="http"
>>>                    role="consumer"
>>>                    targetService="service"
>>>                    targetEndpoint="ejb"
>>>                    locationURI="http://0.0.0.0:8181/what/you/want";
>>>                    defaultMep="http://www.w3.org/2004/08/wsdl/in-out";
>>>                    soap="true"
>>>                    />
>>>
>>> During this time, I take a look on the interceptor usage in the default 
>>> SOAP marshaler.
>>>
>>> Regards
>>> JB
>>>
>>> laolong wrote:
>>>> Hi JB,
>>>>    Yes, I think CXF-SU internal endpoint should be working.
>>>>    I tried servicemix-http-2009.01.0.1-fuse-installer.zip (FUSE
>>>> 3.4.0.2)
>>>> and
>>>> servicemix-http-2008.01-installer.zip(Servicemix3.3) , got same
>>>> 'InputStream
>>>> content not found' error.
>>>>
>>>> Thanks,
>>>> Long
>>>>
>>>>
>>>>
>>>> Jean-Baptiste Onofré wrote:
>>>>> If you can get the WSDL generated by CXF, the CXF-SU should be OK.
>>>>>
>>>>> I'm going to check in the HTTP component source code where is raised
>>>>> the 
>>>>>   NullPointerException.
>>>>> What's the version of the HTTP component that you use ?
>>>>>
>>>>> Regards
>>>>> JB
>>>>>
>>>>> laolong wrote:
>>>>>>  I guess the problem also caused by Http/Jetty issue, the request
>>>>>> message
>>>>>> cannot be processed, message content is lost due to the SOAP message
>>>>>> POST
>>>>>> by
>>>>>> XMLSpy is received with wrong method 'GET'
>>>>>>
>>>>>> SMX log---------------------------------------------
>>>>>>
>>>>>> DEBUG - HttpComponent                  - Receiving HTTP request: GET
>>>>>> /LoginServiceService/main.wsdl HTTP/1.1
>>>>>> Accept: */*
>>>>>> User-Agent: XML Spy
>>>>>> Host: bjc-d-xp:8199
>>>>>> Connection: Keep-Alive
>>>>>> Cache-Control: no-cache
>>>>>>
>>>>>>
>>>>>> DEBUG - JettyContextManager            - Dispatching job:
>>>>>> s...@10234051[d=true,io=0,w=true,b=false|false]
>>>>>> DEBUG - JettyContextManager            - Dispatching job:
>>>>>> s...@10234051[d=true,io=1,w=true,b=false|false]
>>>>>> DEBUG - JettyContextManager            - Dispatching job:
>>>>>> s...@10234051[d=true,io=1,w=true,b=false|false]
>>>>>> DEBUG - HttpComponent                  - Receiving HTTP request: GET
>>>>>> /LoginServiceService/ HTTP/1.1
>>>>>> User-Agent: XML Spy
>>>>>> SOAPAction: "urn:Login"
>>>>>> Host: localhost:8199
>>>>>> Connection: Keep-Alive
>>>>>> Cache-Control: no-cache
>>>>>>
>>>>>>
>>>>>> DEBUG - PhaseInterceptorChain          - Invoking handleMessage on
>>>>>> interceptor
>>>>>> org.apache.servicemix.soap.interceptors.mime.AttachmentsInInterceptor
>>>>>> INFO  - PhaseInterceptorChain          - Interceptor has thrown
>>>>>> exception,
>>>>>> unwinding now
>>>>>> java.lang.NullPointerException: InputStream content not found
>>>>>>  at
>>>>>> org.apache.servicemix.soap.interceptors.mime.AttachmentsInInterceptor.handleMessage(AttachmentsInInterceptor.java:46)
>>>>>>  at
>>>>>> org.apache.servicemix.soap.core.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:85)
>>>>>>  at
>>>>>> org.apache.servicemix.http.endpoints.HttpSoapConsumerMarshaler.createExchange(HttpSoapConsumerMarshaler.java:107)
>>>>>>  at
>>>>>> org.apache.servicemix.http.endpoints.HttpConsumerEndpoint.createExchange(HttpConsumerEndpoint.java:488)
>>>>>>  at
>>>>>> org.apache.servicemix.http.endpoints.HttpConsumerEndpoint.process(HttpConsumerEndpoint.java:293)
>>>>>>  at
>>>>>> org.apache.servicemix.http.HttpBridgeServlet.service(HttpBridgeServlet.java:56)
>>>>>>  at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
>>>>>>  at
>>>>>> org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:502)
>>>>>>  at
>>>>>> org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:363)
>>>>>>  at
>>>>>> org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:766)
>>>>>>  at
>>>>>> org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:230)
>>>>>>  at
>>>>>> org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)
>>>>>>  at
>>>>>> org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
>>>>>>  at org.mortbay.jetty.Server.handle(Server.java:324)
>>>>>>  at
>>>>>> org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:534)
>>>>>>  at
>>>>>> org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:864)
>>>>>>  at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:533)
>>>>>>  at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:207)
>>>>>>  at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:403)
>>>>>>  at
>>>>>> org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409)
>>>>>>  at
>>>>>> org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:522)
>>>>>> DEBUG - PhaseInterceptorChain          - Invoking handleFault on
>>>>>> interceptor
>>>>>> org.apache.servicemix.soap.interceptors.mime.AttachmentsInInterceptor
>>>>>> DEBUG - HttpSoapConsumerMarshaler      - Using default response
>>>>>> content
>>>>>> encoding.
>>>>>> DEBUG - PhaseInterceptorChain          - Invoking handleMessage on
>>>>>> interceptor
>>>>>> org.apache.servicemix.soap.interceptors.xml.StaxOutInterceptor
>>>>>> DEBUG - PhaseInterceptorChain          - Invoking handleMessage on
>>>>>> interceptor
>>>>>> org.apache.servicemix.soap.bindings.soap.interceptors.SoapOutInterceptor
>>>>>> DEBUG - PhaseInterceptorChain          - Invoking handleMessage on
>>>>>> interceptor
>>>>>> org.apache.servicemix.soap.bindings.soap.interceptors.SoapFaultOutInterceptor
>>>>>>
>>>>>>
>>>>>> Jean-Baptiste Onofré wrote:
>>>>>>> Hi Long,
>>>>>>>
>>>>>>> In your CXF-SE xbean.xml, I see that you try to make the JNDI lookup
>>>>>>> on 
>>>>>>> a Weblogic application server.
>>>>>>>
>>>>>>> Nevertheless, I can't see the weblogic.jar file into your SU lib
>>>>>>> directory.
>>>>>>>
>>>>>>> To be able to make JNDI lookup and RMI-IIOP, you need the weblogic 
>>>>>>> client lib.
>>>>>>>
>>>>>>> In your pom.xml, you should have a dependency like this:
>>>>>>>
>>>>>>> <dependency>
>>>>>>>    <groupId>com.oracle.weblogic</groupId>
>>>>>>>    <artifactId>server</artifactId>
>>>>>>>    <version>10.3</version>
>>>>>>> </dependency>
>>>>>>>
>>>>>>> You can install the weblogic.jar into your maven working copy using:
>>>>>>> mvn install:install-file -DgroupId=com.oracle.weblogic 
>>>>>>> -DartifactId=server -Dfile=$WLS_HOME/server/lib/weblogic.jar 
>>>>>>> -Dversion=10.3 -Dpackaging=jar
>>>>>>>
>>>>>>> Could you make a try adding the weblogic.jar into the SU ?
>>>>>>>
>>>>>>> Regards
>>>>>>> JB
>>>>>>>
>>>>>>> laolong wrote:
>>>>>>>>  Hi JB,
>>>>>>>>     
>>>>>>>>      http://www.nabble.com/file/p23978791/demo.zip demo.zip 
>>>>>>>>
>>>>>>>>     I built a test EJB but got same error again, all java code and
>>>>>>>> bean
>>>>>>>> defination are in attached, could you please review it?
>>>>>>>>     
>>>>>>>>     I'm sorry that cannot find a way to send email with attachement
>>>>>>>> to
>>>>>>>> you
>>>>>>>> alone, so I have to use 'Reply' page to upload the file.
>>>>>>>>
>>>>>>>>    Thanks a lot.
>>>>>>>>
>>>>>>>> Long  
>>>>>>>>
>>>>>>>>
>>>>>>>> Hummm, weird.
>>>>>>>>
>>>>>>>> Could you provide the annotate in the your LoginService class (and
>>>>>>>> the 
>>>>>>>> corresponding interface) ?
>>>>>>>> It looks like that the CXF-SE side is not deployed correctly (and
>>>>>>>> so
>>>>>>>> the 
>>>>>>>> HTTP component can't find it).
>>>>>>>> Have you all EJB proxy requirements present in your SU zip (EJBs
>>>>>>>> stub, 
>>>>>>>> etc) ?
>>>>>>>> Is it possible to provide your cxf-se zip file (only to my, not on
>>>>>>>> the 
>>>>>>>> mailing list) ?
>>>>>>>>
>>>>>>>> Regards
>>>>>>>> JB
>>>
>> 
> 
> 

-- 
View this message in context: 
http://www.nabble.com/How-to-invoke-EJB-and-How-to-disable-WSDL-validation-in-http%3Asoap-consumer-provider--tp23963883p23994105.html
Sent from the ServiceMix - User mailing list archive at Nabble.com.

Reply via email to