Ejemplo n.º 1
0
  /** Create a CXF Client */
  @Override
  Client createClient() throws Exception {

    // get service class
    Class<?> cls = getSEIClass();

    if (getDataFormat().equals(DataFormat.POJO)) {
      ObjectHelper.notNull(cls, CxfConstants.SERVICE_CLASS);
    }

    if (getWsdlURL() == null && cls == null) {
      // no WSDL and serviceClass specified, set our default serviceClass
      setServiceClass(org.apache.camel.component.cxf.DefaultSEI.class.getName());
      setDefaultOperationNamespace(CxfConstants.DISPATCH_NAMESPACE);
      setDefaultOperationName(CxfConstants.DISPATCH_DEFAULT_OPERATION_NAMESPACE);
      if (getDataFormat().equals(DataFormat.PAYLOAD)) {
        setSkipPayloadMessagePartCheck(true);
      }
      cls = getSEIClass();
    }

    if (cls != null) {
      // create client factory bean
      ClientProxyFactoryBean factoryBean = createClientFactoryBean(cls);

      // configure client factory bean by CXF configurer
      configure(factoryBean);

      // setup client factory bean
      setupClientFactoryBean(factoryBean, cls);

      // fill in values that have not been filled.
      QName serviceQName = null;
      try {
        serviceQName = factoryBean.getServiceName();
      } catch (IllegalStateException e) {
        // It throws IllegalStateException if serviceName has not been set.
      }

      if (serviceQName == null && getServiceLocalName() != null) {
        factoryBean.setServiceName(new QName(getServiceNamespace(), getServiceLocalName()));
      }
      if (factoryBean.getEndpointName() == null && getEndpointLocalName() != null) {
        factoryBean.setEndpointName(new QName(getEndpointNamespace(), getEndpointLocalName()));
      }

      return ((ClientProxy) Proxy.getInvocationHandler(factoryBean.create())).getClient();
    } else {

      ClientFactoryBean factoryBean = createClientFactoryBean();

      // configure client factory bean by CXF configurer
      configure(factoryBean);

      // setup client factory bean
      setupClientFactoryBean(factoryBean);

      // fill in values that have not been filled.
      QName serviceQName = null;
      try {
        serviceQName = factoryBean.getServiceName();
      } catch (IllegalStateException e) {
        // It throws IllegalStateException if serviceName has not been set.
      }

      if (serviceQName == null && getServiceLocalName() != null) {
        factoryBean.setServiceName(new QName(getServiceNamespace(), getServiceLocalName()));
      }
      if (factoryBean.getEndpointName() == null && getEndpointLocalName() != null) {
        factoryBean.setEndpointName(new QName(getEndpointNamespace(), getEndpointLocalName()));
      }

      checkName(factoryBean.getEndpointName(), "endpoint/port name");
      checkName(factoryBean.getServiceName(), "service name");
      return (Client) factoryBean.create();
    }
  }