Details

    • Type: Sub-task
    • Status: Closed
    • Priority: Minor
    • Resolution: Won't Fix
    • Affects Version/s: 2.3.1
    • Fix Version/s: Invalid
    • Component/s: JAX-WS Runtime
    • Labels:
    • Environment:

      Apache MINA 2.0.2

    • Estimated Complexity:
      Unknown

      Description

      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();
      }

        Attachments

          Activity

            People

            • Assignee:
              Unassigned
              Reporter:
              balexander Burton Alexander
            • Votes:
              0 Vote for this issue
              Watchers:
              0 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: