2012-02-01 4 views
1

У меня есть WSDL-файл, который содержит:Как изменить тему JMS программно в CXF сгенерированном клиенте?

<wsdl:port name="NotificationConsumerSoapJms" 
     binding="tns_NotificationConsumer:NotificationConsumerSoapJmsBinding"> 
     <jms:address destinationStyle="topic" 
      jndiConnectionFactoryName="ConnectionFactory" 
      jndiDestinationName="dynamicTopics/test.DefaultTopic"> 

      <jms:JMSNamingProperty name="java.naming.factory.initial" 
       value="org.apache.activemq.jndi.ActiveMQInitialContextFactory" /> 
      <jms:JMSNamingProperty name="java.naming.provider.url" 
       value="tcp://localhost:61616" /> 
     </jms:address> 
    </wsdl:port> 

А вот JMS клиент, который был сгенерирован CXF:

URL wsdlURL = EfaNbiWebService.WSDL_LOCATION; 
    if (args.length > 0 && args[0] != null && !"".equals(args[0])) { 
     File wsdlFile = new File(args[0]); 
     try { 
      if (wsdlFile.exists()) { 
       wsdlURL = wsdlFile.toURI().toURL(); 
      } else { 
       wsdlURL = new URL(args[0]); 
      } 
     } catch (MalformedURLException e) { 
      e.printStackTrace(); 
     } 
    } 

    EfaNbiWebService ss = new EfaNbiWebService(wsdlURL, SERVICE_NAME); 
    NotificationConsumer port = ss.getNotificationConsumerSoapJms(); 


    { 
    System.out.println("Invoking notify..."); 
    org.tmforum.mtop.fmw.xsd.hdr.v1.Header _notify_mtopHeader = null; 
    org.tmforum.mtop.fmw.xsd.notmsg.v1.Notify _notify_mtopBody = null; 
    port.notify(_notify_mtopHeader, _notify_mtopBody); 


    } 

Как вы видите, название темы магазина в WSDL-файле. Итак, как сменить название темы программно?

ответ

1

Я нашел решение:

JMSConfiguration jmsConfig = new JMSConfiguration(); 

    ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://" + activeMQServer + ":61616"); 
    jmsConfig.setConnectionFactory(connectionFactory); 
    jmsConfig.setTargetDestination("dynamicTopics/Test.Notification_" + topic); 
    jmsConfig.setReconnectOnException(false); 
    //jmsConfig.se 
    jmsConfig.setPubSubDomain(true); 
    jmsConfig.setUseJms11(true); 
    jmsConfig.setTransactionManager(new JmsTransactionManager(connectionFactory)); 

    JMSConfigFeature jmsConfigFeature = new JMSConfigFeature(); 
    jmsConfigFeature.setJmsConfig(jmsConfig); 

    String address = "jms:jndi:dynamicTopics/Test.Notification_" + topic + "?jndiInitialContextFactory=org.apache.activemq.jndi.ActiveMQInitialContextFactory&jndiConnectionFactoryName=ConnectionFactory&jndiURL=tcp://" + activeMQServer + ":61616"; 
    JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean(); 
    // And specify the transport ID with SOAP over JMS specification 
    factory.setTransportId(JMSSpecConstants.SOAP_JMS_SPECIFICATION_TRANSPORTID); 
    factory.setServiceClass(NotificationConsumer.class); 
    factory.getFeatures().add(jmsConfigFeature); 
    factory.setAddress(address); 
    NotificationConsumer client = (NotificationConsumer)factory.create(); 

имеют хороший день, ребята :)

Смежные вопросы