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