-
怎样转换 JMS消息->SOAP?10
我通过synapse+axis2+activemq来实现webservice异步调用。
我的客户端采用STUB方式。
原先不加synapse跳转,返回的soap消息:
------------------------------------------
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Type: application/soap+xml; action="urn:getInfoResponse";charset=UTF-8
Transfer-Encoding: chunked
Date: Tue, 23 Aug 2011 07:32:52 GMT
10c
<?xml version='1.0' encoding='UTF-8'?>
<soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope">
<soapenv:Body>
<ns:getInfoResponse xmlns:ns="http://test">
<ns:return>webservice:dsfsfsdsdf</ns:return> </ns:getInfoResponse>
</soapenv:Body>
</soapenv:Envelope>
0
------------------------------------------在自动生成的stub中,他解析获取soapenv:Body -> ns:getInfoResponse ->ns:return 里的值
但经过我synapse跳转后,soap消息如下:
------------------------------------------
HTTP/1.1 200 OKContent-Type: application/soap+xml; charset=UTF-8; action="urn:getInfoResponse"
JMS_DESTINATION: ID:sunnaoh-32807-1314058857144-0:2:43
JMS_MESSAGE_ID: ID:sunnaoh-32807-1314058857144-0:3:43:1:1
JMS_EXPIRATION: 0
JMS_COORELATION_ID: ID:sunnaoh-32807-1314058857144-0:2:43:1:1
JMS_PRIORITY: 4
JMS_REDELIVERED: false
JMS_DELIVERY_MODE: 2
Server: Apache-Coyote/1.1
JMS_TIMESTAMP: 1314087564021
Date: Tue, 23 Aug 2011 08:19:24 GMT
Transfer-Encoding: chunked
333
<?xml version='1.0' encoding='UTF-8'?>
<soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope">
<soapenv:Header xmlns:wsa="http://www.w3.org/2005/08/addressing">
<wsa:MessageID>urn:uuid:6e095461-fe09-4d20-84ff-8696de1de720</wsa:MessageID>
<wsa:Action>urn:getInfoResponse</wsa:Action>
<wsa:RelatesTo>urn:uuid:34D85A466163EF41981314088922900</wsa:RelatesTo>
</soapenv:Header>
<soapenv:Body>
<axis2ns43:text xmlns:axis2ns43="http://ws.apache.org/commons/ns/payload"><?xml version='1.0' encoding='UTF-8'?><soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope"><soapenv:Body><ns:getInfoResponse xmlns:ns="http://test"><ns:return>webservice:dsfsffsssf</ns:return></ns:getInfoResponse></soapenv:Body></soapenv:Envelope></axis2ns43:text>
</soapenv:Body>
</soapenv:Envelope>0
------------------------------------------
可以看到,加了JMS消息信息,然后将上面一个SOAP消息包在了自己的BODY中,自动套了axis2ns43:text标签,似乎是以TEXT存放。但这样,以原先stub解析方式就无法取到值了。我应该如何处理这个soap消息?是自己改写stub自带的解析方式(如果要改写解析方式,是怎么一个思路)?还是在synapse这里修改配置,去掉JMS消息头,还是?谁对这方面有经验,请指教,谢谢。
问题补充:先谢谢这位朋友回复。 <br /> <br />Listener之前就配好的,没有这个监听,Axis2就不会接收到消息的。
问题补充:我已将TEXT里面的内容拿出来(其实就解析XML),重新再拼装成Envelope取出值来。2011年8月23日 16:52
1个答案 按时间排序 按投票排序
-
在axis2.xml中配置就可以了吧
<transportReceiver name="jms" class="org.apache.axis2.transport.jms.JMSListener"> <parameter name="myTopicConnectionFactory"> <parameter name="java.naming.factory.initial">org.apache.activemq.jndi.ActiveMQInitialContextFactory</parameter> <parameter name="java.naming.provider.url">tcp://localhost:61616</parameter> <parameter name="transport.jms.ConnectionFactoryJNDIName">TopicConnectionFactory</parameter> </parameter> <parameter name="myQueueConnectionFactory"> <parameter name="java.naming.factory.initial">org.apache.activemq.jndi.ActiveMQInitialContextFactory</parameter> <parameter name="java.naming.provider.url">tcp://localhost:61616</parameter> <parameter name="transport.jms.ConnectionFactoryJNDIName">QueueConnectionFactory</parameter> </parameter> <parameter name="default"> <parameter name="java.naming.factory.initial">org.apache.activemq.jndi.ActiveMQInitialContextFactory</parameter> <parameter name="java.naming.provider.url">tcp://localhost:61616</parameter> <parameter name="transport.jms.ConnectionFactoryJNDIName">QueueConnectionFactory</parameter> </parameter> </transportReceiver>
2011年8月23日 18:41
相关推荐
- **Message Formatter** 则将处理后的消息转换成JMS可理解的格式。 2. **Message Store**: - 定义一个Message Store,例如JMS Store,用于存储从HTTP接收到的消息。这可以配置为与JMS提供者如Apache ActiveMQ或...
- Web服务客户端 -> SOAP -> Web服务应用层 + 企业组件层 - JCA -> ERP/CRM系统 其中,JCA(Java Connector Architecture)用于集成ERP、CRM等后端应用系统;JMS(Java Message Service)用于实现消息传递;JNDI...
3. **生成Web服务代码**:通过File -> New -> Other -> Web Services -> Web Service wizard,选择使用JAVA CLASS创建Web服务。这将自动生成服务接口和实现类。例如,创建名为`com.service`的包,并在其中创建`Hello...
Axis的核心功能包括:创建基于Java的Web服务、调用远程Web服务、处理SOAP消息等。它支持多种版本的SOAP标准,并且可以与其他Web服务栈进行良好的交互。 ### Tuscany与Spring、Axis的整合 在实际项目中,经常会遇到...
2. **配置WebLogic Server**:在WebLogic管理控制台中,进入“Security” -> “Realms” -> “myrealm” -> “SSL”页面。这里需要上传之前创建的Keystore,设置别名,以及密码。 3. **配置监听器**:在“Services...
CXF支持多种协议和绑定,包括SOAP、RESTful HTTP、JMS等。而JAXB(Java Architecture for XML Binding)是Java平台的标准,用于将XML数据与Java对象之间进行绑定,使得开发者可以方便地在XML文档和Java对象之间转换...
-- 假设我们有一个名为MyService的服务接口和MyServiceImpl的实现 --> <jaxws:endpoint id="myService" implementor="com.example.MyServiceImpl" address="/MyService"/> </beans> ``` `implementor`属性指定服务...
4. **构建 JMS 到 SOAP 转换器**:当 Mule 从 JMS 接收到消息时,需要将 JMS 消息转换回 SOAP 响应。这涉及到解封装 JMS 消息体,并创建相应的 SOAP 响应。 5. **设置响应路径**:确保 Mule 应用能够正确地将 SOAP ...
数据编码是指将数据转换为适合在网络上传输的形式,SOAP支持多种编码风格,包括RPC/Encoded、Document/Literal等,不同的编码风格会影响消息的大小和解析的复杂度。 ### SOAP传输层 SOAP消息可以在多种传输协议上...
在MyEclipse中,可以使用“New -> Project -> Web Service Project”来创建。接着,定义一个接口(如IAccount)和一个实现类(如AccountImp),XFire会通过接口反射机制获取并暴露远程方法。在Web服务配置中,指定...
- **解析**: MQ Input节点用于接收来自MQ队列的消息,而MQ JMS Transform节点则用于将这些消息转换成JMS消息格式,以便进一步处理或路由。 以上内容提供了000-315考试的一些关键知识点和示例问题,希望对备考者...
-- 这里可以添加你的服务类 --> </list> </constructor-arg> </bean> <bean id="cxfServlet" class="org.apache.cxf.transport.servlet.CXFServlet"> <load-on-startup>1</load-on-startup> </bean> ``` - *...
JAX-WS支持SOAP消息处理,包括SOAP消息头和SOAP消息体的处理。开发者可以通过实现MessageHandler接口来扩展消息处理能力。 5. **数据绑定** JAX-WS使用Java Architecture for XML Binding (JAXB)进行数据绑定,将...
- **JMS 发送者** (JMS Sender):将消息转换为JMS格式,并通过JMS网络发送。 - **JMS 监听器** (JMS Listener):监听JMS网络上的消息。 - **Axis 引擎服务** (Axis Engine Service):处理接收到的消息并提供相应的...
- **SoapMessage**:具体实现了 SOAP 消息的类。 - **Message Factories**:用于创建消息实例的工厂类。 ##### 4.2 传输上下文 描述了消息传输过程中涉及的上下文信息。 ##### 4.3 使用 XPath 处理 XML - **...
它提供了一种基于标准的、类型安全的方式来创建和消费SOAP消息。JAX-WS通过Java SE和Java EE环境下的API,使得开发者能够方便地实现Web服务的客户端和服务端应用程序。 CXF是JAX-WS的一个实现框架,它扩展了基本的...
- **cxf-rt-bindings-soap**和**cxf-rt-bindings-xml**:SOAP和XML绑定实现,用于解析和序列化SOAP和XML消息。 - **cxf-rt-ws-security**:Web服务安全相关的实现,包括WS-Security标准的支持。 通过对这些源码的...
CXF支持多种消息格式和传输协议,如SOAP、XML通过HTTP或JMS,以及多种模型,如JAX-WS、JBI、SCA和CORBA服务。此外,它还具有高度的灵活性,可以部署在Spring基础的容器、JBI、SCA、Servlet和J2EE容器中。 在开始...