Hi JB,

   You are right, HttpSoapConsumerMarshaler doesn't support GET method,
actually, I use POST method to send data but it's changed to 'GET' in SMX
log(caused by a missing slash in request url), so I rewrite my own
SoapConsumerMarshaler class extends original HttpSoapConsumerMarshaler to
make the 'fake' GET method work :) 

 headers.put(HttpConstants.REQUEST_METHOD, "POST"); 
 // if (HttpConstants.METHOD_POST.equals(method) 
 // || HttpConstants.METHOD_PUT.equals(method)) { 
    msg.setContent(InputStream.class, request.getInputStream()); 
 // } 

   Then I found Jetty(or http component?) would set the request method to
GET when the service url isn't end with slash(/) even if client use POST.

   I can use POST method now, and in fact, we don't need to do GET.

 Thanks a lot!

Regards
Long


Jean-Baptiste Onofré wrote:
> 
> Hi Long,
> 
> Let me check in the HTTP component how the validateWsdl attribute works.
> Nevertheless, could you confirm that you can use both GET and POST 
> method or do you still have an issue on one of the method ?
> 
> Regards
> JB
> 
> laolong wrote:
>> 
>> Hi JB,
>> 
>>    GET works just when I remove RequestMethod checking, so there is no
>> problem in http component. Anyway, now the ejb proxy is working, but
>> another
>> open issue is the http:soap-consumer still need a valid WSDL file since
>> both
>> validateWsdl='no' and validateWsdl='false' are not effective, could you
>> help
>> to check if this flag is working on your side?
>> 
>> Thanks,
>> Long
>> 
>> 
>> Jean-Baptiste Onofré wrote:
>>> In fact, I'm suprised that it works in GET :)
>>> Regarding the code, it should work only in POST :)
>>>
>>> Could make both test and send me the corresponding logs ?
>>>
>>> Thanks,
>>> Regards
>>> JB
>>>
>>> laolong wrote:
>>>> 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--tp23963883p23999681.html
Sent from the ServiceMix - User mailing list archive at Nabble.com.

Reply via email to