cxf-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Daniel Kulp (JIRA)" <j...@apache.org>
Subject [jira] Updated: (CXF-3335) SOAP messages not fully processed over TCP / MINA
Date Wed, 16 Mar 2011 03:34:29 GMT

     [ https://issues.apache.org/jira/browse/CXF-3335?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

Daniel Kulp updated CXF-3335:
-----------------------------

    Issue Type: Sub-task  (was: Bug)
        Parent: CXF-2256

> SOAP messages not fully processed over TCP / MINA
> -------------------------------------------------
>
>                 Key: CXF-3335
>                 URL: https://issues.apache.org/jira/browse/CXF-3335
>             Project: CXF
>          Issue Type: Sub-task
>          Components: JAX-WS Runtime
>    Affects Versions: 2.3.1
>         Environment: Apache MINA 2.0.2
>            Reporter: Burton Alexander
>            Priority: Minor
>              Labels: TCP, cxf, mina
>
> To simplify internal SOAP message transport I've created a class which implements the
specific SOAP interface (SOAPPort from SIRI - http://www.siri.org.uk/) and starts a CXF Server
using the following code:
> private void startService(String address, boolean loggingEnabled) {
>   JaxWsServerFactoryBean sfb = new JaxWsServerFactoryBean();
>   sfb.setAddress(address);
>   sfb.setServiceClass(SOAPPort.class);
>   sfb.getServiceFactory().setInvoker(new BeanInvoker(this));
>   if(loggingEnabled) sfb.getInInterceptors().add(new LoggingInInterceptor());
>   server = sfb.create();
> }
> When the string address is an HTTP address the system functions as expected.  However,
when attempting to use TCP (soap.tcp://) none of the SOAP interface methods implemented in
the enclosing class are invoked.
> I've traced the problem as far as SoapTcpDestination's messageReceived method (implemented
from MINA's IoHandler interface).  It is being called twice - once for channel creation and
once for channel opened, but not for the actual message itself:
>   if (((SoapTcpMessage)message).getChannelId() == 0) {  // channel id is always zero
>     ChannelService.service(session, (SoapTcpMessage)message);
>   } else {
>     Message msg = new MessageImpl();
>     Exchange exchange = new ExchangeImpl();
>     exchange.setConduit(conduit);
>     exchange.setDestination(this);
>     msg.setExchange(exchange);
>     msg.setContent(InputStream.class, ((SoapTcpMessage)message).getContentAsStream());
>     msg.setContent(SoapTcpChannel.class, getChannel(session, (SoapTcpMessage)message));
>     msg.setContent(IoSession.class, session);
>     incomingObserver.onMessage(msg);  // never gets executed.
>   }
> To send messages to the created CXF Server I use the following code:
> private static SOAPPort getSoapPort(String address) {
>   JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
>   factory.setServiceClass(SOAPPort.class);
>   factory.setAddress(address);
>   factory.getInInterceptors().add(new LoggingInInterceptor());
>   factory.getOutInterceptors().add(new LoggingOutInterceptor());
>   return (SOAPPort) factory.create();
> }

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

Mime
View raw message