You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@cxf.apache.org by "Daniel Kulp (JIRA)" <ji...@apache.org> on 2011/09/09 20:51:09 UTC

[jira] [Resolved] (CXF-3335) SOAP messages not fully processed over TCP / MINA

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

Daniel Kulp resolved CXF-3335.
------------------------------

       Resolution: Won't Fix
    Fix Version/s: Invalid


This improvement request has been open for years and no-one has stepped up to implement it. As such, it does not seems to be a priority for the existing CXF community. If, in the future, someone would like to tackle this, feel free to open is and attach a patch.

> 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
>             Fix For: Invalid
>
>
> 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