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


Reply via email to