예제 #1
0
  public EndpointInfo createEndpointInfo(
      Bus bus, ServiceInfo serviceInfo, BindingInfo b, List<?> ees) {
    String transportURI = "http://schemas.xmlsoap.org/wsdl/soap/";
    if (b instanceof SoapBindingInfo) {
      SoapBindingInfo sbi = (SoapBindingInfo) b;
      transportURI = sbi.getTransportURI();
    }
    EndpointInfo info = new SoapEndpointInfo(serviceInfo, transportURI);

    if (ees != null) {
      for (Iterator<?> itr = ees.iterator(); itr.hasNext(); ) {
        Object extensor = itr.next();

        if (SOAPBindingUtil.isSOAPAddress(extensor)) {
          final SoapAddress sa = SOAPBindingUtil.getSoapAddress(extensor);

          info.addExtensor(sa);
          info.setAddress(sa.getLocationURI());
          if (isJMSSpecAddress(sa.getLocationURI())) {
            info.setTransportId(SoapJMSConstants.SOAP_JMS_SPECIFICIATION_TRANSPORTID);
          }
        } else {
          info.addExtensor(extensor);
        }
      }
    }

    return info;
  }
 private void changeTransportUriToZmq(Endpoint ep) {
   if (ep.getBinding() == null) {
     return;
   }
   if (ep.getBinding().getBindingInfo() == null) {
     return;
   }
   BindingInfo bindingInfo = ep.getBinding().getBindingInfo();
   if (bindingInfo instanceof SoapBindingInfo) {
     SoapBindingInfo soapBindingInfo = (SoapBindingInfo) bindingInfo;
     soapBindingInfo.setTransportURI("http://schemas.xmlsoap.org/soap/zmq");
   }
 }
  public BindingInfo createBindingInfo(ServiceInfo service, javax.wsdl.Binding binding, String ns) {
    SoapBindingInfo bi = new SoapBindingInfo(service, ns);
    // Copy all the extensors
    initializeBindingInfo(service, binding, bi);

    SoapBinding wSoapBinding =
        SOAPBindingUtil.getSoapBinding(bi.getExtensors(ExtensibilityElement.class));

    bi.setTransportURI(wSoapBinding.getTransportURI());
    bi.setStyle(wSoapBinding.getStyle());

    for (BindingOperationInfo boi : bi.getOperations()) {
      initializeBindingOperation(bi, boi);
    }

    return bi;
  }
  @Test
  public void testDestination() throws Exception {
    String wsdlSoapNs = "http://schemas.xmlsoap.org/wsdl/soap/";
    String transportURI = "http://foo/transport";
    // String location = "http://localhost/service";

    ServiceInfo si = new ServiceInfo();
    EndpointInfo ei = new EndpointInfo(si, wsdlSoapNs);
    // this code used to call "new SOAPAddressImpl()", but the test
    // is currently not testing anything, and needlessly ties the
    // code to a specific implementation of wsdl4j. When the SOAPAddress
    // is really needed, it should be mocked.
    SOAPAddress add = null;
    // add.setLocationURI(location);
    ei.addExtensor(add);

    SoapBindingInfo bi = new SoapBindingInfo(si, "", Soap11.getInstance());
    bi.setTransportURI(transportURI);
    ei.setBinding(bi);

    IMocksControl control = EasyMock.createNiceControl();
    DestinationFactoryManager dfm = control.createMock(DestinationFactoryManager.class);
    DestinationFactory fooDF = control.createMock(DestinationFactory.class);
    Destination dest = control.createMock(Destination.class);

    EasyMock.expect(dfm.getDestinationFactory(transportURI)).andReturn(fooDF);
    EasyMock.expect(fooDF.getDestination(ei, null)).andStubReturn(dest);

    control.replay();

    // SoapDestinationFactory sdf = new SoapDestinationFactory(dfm);
    // Destination dest2 = sdf.getDestination(ei);
    // assertNotNull(dest2);

    // TODO: doesn't pass because I don't know how to use easymock :-(
    // assertEquals(dest, dest2);
  }
예제 #5
0
 public void createPortExtensors(Bus b, EndpointInfo ei, Service service) {
   if (ei.getBinding() instanceof SoapBindingInfo) {
     SoapBindingInfo bi = (SoapBindingInfo) ei.getBinding();
     createSoapExtensors(b, ei, bi, bi.getSoapVersion() instanceof Soap12);
   }
 }
  public Binding createBinding(BindingInfo binding) {
    // TODO what about the mix style/use?

    // The default style should be doc-lit wrapped.
    String parameterStyle = SoapBindingConstants.PARAMETER_STYLE_WRAPPED;
    String bindingStyle = SoapBindingConstants.BINDING_STYLE_DOC;

    boolean hasWrapped = false;

    org.apache.cxf.binding.soap.SoapBinding sb = null;
    SoapVersion version = null;
    if (binding instanceof SoapBindingInfo) {
      SoapBindingInfo sbi = (SoapBindingInfo) binding;
      version = sbi.getSoapVersion();
      sb = new org.apache.cxf.binding.soap.SoapBinding(binding, version);
      // Service wide style
      if (!StringUtils.isEmpty(sbi.getStyle())) {
        bindingStyle = sbi.getStyle();
      }

      boolean hasRPC = false;
      boolean hasDoc = false;

      // Operation wide style, what to do with the mixed style/use?
      for (BindingOperationInfo boi : sbi.getOperations()) {
        String st = sbi.getStyle(boi.getOperationInfo());
        if (st != null) {
          bindingStyle = st;
          if (SoapBindingConstants.BINDING_STYLE_RPC.equalsIgnoreCase(st)) {
            hasRPC = true;
          } else {
            hasDoc = true;
          }
        }
        if (boi.getUnwrappedOperation() == null) {
          parameterStyle = SoapBindingConstants.PARAMETER_STYLE_BARE;
        } else {
          hasWrapped = true;
        }
      }

      if (Boolean.TRUE.equals(binding.getService().getProperty("soap.force.doclit.bare"))) {
        hasDoc = true;
        hasRPC = false;
        parameterStyle = SoapBindingConstants.PARAMETER_STYLE_BARE;
        bindingStyle = SoapBindingConstants.BINDING_STYLE_DOC;
      }
      if (hasRPC && hasDoc) {
        throw new RuntimeException(
            "WSI-BP prohibits RPC and Document style " + "operations in same service.");
      }

      // jms
      if (sbi.getTransportURI().equals(SoapJMSConstants.SOAP_JMS_SPECIFICIATION_TRANSPORTID)) {
        sb.getInInterceptors().add(new SoapJMSInInterceptor());
      }
    } else {
      throw new RuntimeException(
          "Can not initialize SoapBinding, BindingInfo is not SoapBindingInfo");
    }

    sb.getOutFaultInterceptors().add(new StaxOutInterceptor());
    sb.getOutFaultInterceptors().add(new SoapOutInterceptor(getBus()));

    sb.getInInterceptors().add(new AttachmentInInterceptor());
    sb.getInInterceptors().add(new StaxInInterceptor());
    sb.getInInterceptors().add(new SoapActionInInterceptor());

    sb.getOutInterceptors().add(new AttachmentOutInterceptor());
    sb.getOutInterceptors().add(new StaxOutInterceptor());
    sb.getOutInterceptors().add(SoapHeaderOutFilterInterceptor.INSTANCE);

    if (SoapBindingConstants.BINDING_STYLE_RPC.equalsIgnoreCase(bindingStyle)) {
      sb.getInInterceptors().add(new RPCInInterceptor());
      sb.getOutInterceptors().add(new RPCOutInterceptor());
    } else if (SoapBindingConstants.BINDING_STYLE_DOC.equalsIgnoreCase(bindingStyle)
        && SoapBindingConstants.PARAMETER_STYLE_BARE.equalsIgnoreCase(parameterStyle)) {
      // sb.getInInterceptors().add(new BareInInterceptor());
      sb.getInInterceptors().add(new DocLiteralInInterceptor());
      if (hasWrapped) {
        sb.getOutInterceptors().add(new WrappedOutInterceptor());
      }
      sb.getOutInterceptors().add(new BareOutInterceptor());
    } else {
      // sb.getInInterceptors().add(new WrappedInInterceptor());
      sb.getInInterceptors().add(new DocLiteralInInterceptor());
      sb.getOutInterceptors().add(new WrappedOutInterceptor());
      sb.getOutInterceptors().add(new BareOutInterceptor());
    }
    sb.getInInterceptors().add(new SoapHeaderInterceptor());

    sb.getInInterceptors().add(new ReadHeadersInterceptor(getBus(), version));
    sb.getInInterceptors().add(new StartBodyInterceptor());
    sb.getInInterceptors().add(new CheckFaultInterceptor());
    sb.getInInterceptors().add(new MustUnderstandInterceptor());
    sb.getOutInterceptors().add(new SoapPreProtocolOutInterceptor());
    sb.getOutInterceptors().add(new SoapOutInterceptor(getBus()));
    sb.getOutFaultInterceptors().add(new SoapOutInterceptor(getBus()));
    sb.getOutFaultInterceptors().add(SoapHeaderOutFilterInterceptor.INSTANCE);

    // REVISIT: The phase interceptor chain seems to freak out if this added
    // first. Not sure what the deal is at the moment, I suspect the
    // ordering algorithm needs to be improved
    sb.getInInterceptors().add(new URIMappingInterceptor());

    if (version.getVersion() == 1.1) {
      sb.getInFaultInterceptors().add(new Soap11FaultInInterceptor());
      sb.getOutFaultInterceptors().add(new Soap11FaultOutInterceptor());
    } else if (version.getVersion() == 1.2) {
      sb.getInFaultInterceptors().add(new Soap12FaultInInterceptor());
      sb.getOutFaultInterceptors().add(new Soap12FaultOutInterceptor());
    }

    if (binding.getService() != null) {
      for (EndpointInfo ei : binding.getService().getEndpoints()) {
        if (ei.getAddress() != null && ei.getAddress().startsWith("soap.udp")) {
          setupUDP(sb, ei);
        }
      }
    }

    return sb;
  }
  private void createSoapBinding(final SoapBindingInfo bi) throws WSDLException {
    boolean isSoap12 = bi.getSoapVersion() instanceof Soap12;
    Bus bs = getBus();
    WSDLManager m = bs.getExtension(WSDLManager.class);
    ExtensionRegistry extensionRegistry = m.getExtensionRegistry();

    SoapBinding soapBinding = SOAPBindingUtil.createSoapBinding(extensionRegistry, isSoap12);
    soapBinding.setStyle(bi.getStyle());
    soapBinding.setTransportURI(bi.getTransportURI());
    bi.addExtensor(soapBinding);

    for (BindingOperationInfo b : bi.getOperations()) {
      for (BindingFaultInfo faultInfo : b.getFaults()) {
        SoapFault soapFault = SOAPBindingUtil.createSoapFault(extensionRegistry, isSoap12);
        soapFault.setUse("literal");
        soapFault.setName(faultInfo.getFaultInfo().getFaultName().getLocalPart());
        faultInfo.addExtensor(soapFault);
      }
      SoapOperationInfo soi = b.getExtensor(SoapOperationInfo.class);

      SoapOperation soapOperation =
          SOAPBindingUtil.createSoapOperation(extensionRegistry, isSoap12);
      soapOperation.setSoapActionURI(soi.getAction());
      soapOperation.setStyle(soi.getStyle());
      boolean isRpc = "rpc".equals(soapOperation.getStyle());

      b.addExtensor(soapOperation);

      if (b.getInput() != null) {
        List<String> bodyParts = null;
        List<SoapHeaderInfo> headerInfos = b.getInput().getExtensors(SoapHeaderInfo.class);
        if (headerInfos != null && headerInfos.size() > 0) {
          bodyParts = new ArrayList<String>();
          for (MessagePartInfo part : b.getInput().getMessageParts()) {
            bodyParts.add(part.getName().getLocalPart());
          }

          for (SoapHeaderInfo headerInfo : headerInfos) {
            SoapHeader soapHeader =
                SOAPBindingUtil.createSoapHeader(extensionRegistry, BindingInput.class, isSoap12);
            soapHeader.setMessage(b.getInput().getMessageInfo().getName());
            soapHeader.setPart(headerInfo.getPart().getName().getLocalPart());
            soapHeader.setUse("literal");
            bodyParts.remove(headerInfo.getPart().getName().getLocalPart());
            headerInfo.getPart().setProperty(HEADER, true);
            b.getInput().addExtensor(soapHeader);
          }
        }
        SoapBody body =
            SOAPBindingUtil.createSoapBody(extensionRegistry, BindingInput.class, isSoap12);
        body.setUse("literal");
        if (isRpc) {
          body.setNamespaceURI(b.getName().getNamespaceURI());
        }

        if (bodyParts != null) {
          body.setParts(bodyParts);
        }

        b.getInput().addExtensor(body);
      }

      if (b.getOutput() != null) {
        List<String> bodyParts = null;
        List<SoapHeaderInfo> headerInfos = b.getOutput().getExtensors(SoapHeaderInfo.class);
        if (headerInfos != null && headerInfos.size() > 0) {
          bodyParts = new ArrayList<String>();
          for (MessagePartInfo part : b.getOutput().getMessageParts()) {
            bodyParts.add(part.getName().getLocalPart());
          }
          for (SoapHeaderInfo headerInfo : headerInfos) {
            SoapHeader soapHeader =
                SOAPBindingUtil.createSoapHeader(extensionRegistry, BindingOutput.class, isSoap12);
            soapHeader.setMessage(b.getOutput().getMessageInfo().getName());
            soapHeader.setPart(headerInfo.getPart().getName().getLocalPart());
            soapHeader.setUse("literal");
            bodyParts.remove(headerInfo.getPart().getName().getLocalPart());
            b.getOutput().addExtensor(soapHeader);
          }
        }
        SoapBody body =
            SOAPBindingUtil.createSoapBody(extensionRegistry, BindingOutput.class, isSoap12);
        body.setUse("literal");
        if (isRpc) {
          body.setNamespaceURI(b.getName().getNamespaceURI());
        }

        if (bodyParts != null) {
          body.setParts(bodyParts);
        }

        b.getOutput().addExtensor(body);
      }
    }
  }
  public BindingInfo createBindingInfo(ServiceInfo si, String bindingid, Object conf) {
    SoapBindingConfiguration config;
    if (conf instanceof SoapBindingConfiguration) {
      config = (SoapBindingConfiguration) conf;
    } else {
      config = new SoapBindingConfiguration();
    }
    if (WSDLConstants.NS_SOAP12.equals(bindingid)
        || WSDLConstants.NS_SOAP12_HTTP_BINDING.equals(bindingid)) {
      config.setVersion(Soap12.getInstance());
      config.setTransportURI(WSDLConstants.NS_SOAP_HTTP_TRANSPORT);
    }
    SoapBindingInfo info = new SoapBindingInfo(si, bindingid, config.getVersion());

    info.setName(config.getBindingName(si));
    info.setStyle(config.getStyle());

    info.setTransportURI(config.getTransportURI());

    if (config.isMtomEnabled()) {
      info.setProperty(Message.MTOM_ENABLED, Boolean.TRUE);
    }

    for (OperationInfo op : si.getInterface().getOperations()) {
      SoapOperationInfo sop = new SoapOperationInfo();
      sop.setAction(config.getSoapAction(op));
      sop.setStyle(config.getStyle(op));

      BindingOperationInfo bop =
          info.buildOperation(op.getName(), op.getInputName(), op.getOutputName());

      bop.addExtensor(sop);

      info.addOperation(bop);

      BindingMessageInfo bInput = bop.getInput();
      if (bInput != null) {
        MessageInfo input = null;
        BindingMessageInfo unwrappedMsg = bInput;
        if (bop.isUnwrappedCapable()) {
          input = bop.getOperationInfo().getUnwrappedOperation().getInput();
          unwrappedMsg = bop.getUnwrappedOperation().getInput();
        } else {
          input = bop.getOperationInfo().getInput();
        }
        setupHeaders(bop, bInput, unwrappedMsg, input, config);
      }

      BindingMessageInfo bOutput = bop.getOutput();
      if (bOutput != null) {
        MessageInfo output = null;
        BindingMessageInfo unwrappedMsg = bOutput;
        if (bop.isUnwrappedCapable()) {
          output = bop.getOperationInfo().getUnwrappedOperation().getOutput();
          unwrappedMsg = bop.getUnwrappedOperation().getOutput();
        } else {
          output = bop.getOperationInfo().getOutput();
        }
        setupHeaders(bop, bOutput, unwrappedMsg, output, config);
      }
    }

    try {
      createSoapBinding(info);
    } catch (WSDLException e) {
      e.printStackTrace();
    }

    return info;
  }