我正在构建一个基于Mule ESB的中间件,实现异步Web服务。我有一个客户机,它通过SoapUI向我的ESBendpoint发送Soap请求,ESBendpoint由启用了ws-Addressing功能的CXF Jax ws服务实现。我发送响应字符串“Hello”,并开始处理输入参数,以向具有回调web服务endpoint的客户端进行异步回复。
该请求具有正确的Soap标头和标记ReplyTo,该标记具有客户端中回调endpoint的地址。
这是我的服务器jax-ws Web服务代码:
@WebService(serviceName = "OrderReceive")
@Addressing
public class OrderReceive {
public String perform(String id, long creditCardNumber, List<Product> products) {
//Save values to process the async reply
setSessionVariable(id,creditCardNumber,products);
return "Hello, i will send the response soon";
}
}
问题是我的Web服务正在自动转发到ReplyTo地址,我无法控制响应。
是否可以拦截该响应,并设置正确的响应主体?
为什么我的Web服务会自动响应?
当做
这就是为什么我喜欢stackoverflow。我从没听说过这个!!!
您的“自动响应”可能是由mule中的行为引起的:
如果mule在消息中检测到reply\u to属性,则会自动对该endpoint进行响应。这是为了jms中的请求-应答功能,但可能会影响http连接器。
来源:
发送消息时自动响应
-------------------*------------------------
经过研究,我发现ws-addressing的正确行为是:
client -- SOAP request ( on port A ) --> server
client <-- HTTP 202 ( "Hello, i will send the response soon" HTTP body ) --- server
client <-- SOAP response ("Response is ready!!" on port B ) --- server
来源:jax ws 2.2.8和ws-addressing
为了实现这一点,我们需要:
1.-服务器endpoint:mule/cxf
2.-服务客户:soapui
3.-回调endpoint:接收异步响应(我认为这是在mule中)
理解了这一点,有关它的官方文件令人难过:
MULE 3.7启用WS寻址
我认为您需要回调Enpoint来创建和执行异步响应。我在骡子身上没有发现任何东西:(。
以下是java实现的一些链接,无mule:
具有WS-Addting的异步Web服务
使用JAX-WS和WS-Addting调用单端口异步服务
-------------------*------------------------
另一种解决方案可以是:
1.-mule/cxf中的Web服务没有寻址。
2.-内部操作方法:
public Response operation ( Request requestPayload ) {
MuleClient client = new MuleClient(muleContext);
client.dispatch("jms://my.queue", requestPayload , null);// this is async
return new Response("Hello, i will send the response soon.");
}
参考:使用Mule客户端
3.-创建jms入站endpoint侦听:jms://my.queue
<flow>
<jms:inbound-endpoint queue="my.queue" >
<do something>
<launch a response to client>
</flow>
这可能是:
a、 -通过电子邮件发送给客户
b、 -使用客户端发布的服务
c、 -短信通知
D.-随便吧
这种方法可以更加灵活,支持未来疯狂的需求。
如果您需要mule cxf服务或jms方面的帮助,请告诉我以帮助您!!
http://jrichardsz.github.io/
我正在使用cxf作为带有WS-寻址的apache骆驼路由中的生产者。我知道可以通过(例如可能是错误的)在路由中设置SoapAction Header WS-Addressing操作字段是否也可以这样做?因为我注意到它发送的值错误。我需要输入两个WS-Addressing操作值,并在驼峰路线中决定使用哪一个。
我有一个Web服务,我试图使用以下客户端代码调用它: 在服务器端(Tomcat),webservice实现如下: CxfAdd。java: CxfAddImpl。java: 但是,当我运行客户端代码时,在服务器端我得到以下错误: 似乎我没有发送ws-addressing属性,有人能帮我找出代码中的错误或缺失吗?非常感谢。
我试图用Apache CXF 2.7.18实现WS-Addressing。我可以设置一些标题,如to、Action等。。但我想从SOAP请求中删除ReplyTo 有人知道怎么做吗?
我有一个问题:我们正在尝试用Apache CXF实现WS-Addressing。我可以设置一些标题,如to或Action,但无法设置其他标题,如From、ReplyTo或FaultTo。 有人知道怎么做吗?
问题内容: 所有,我都试图编写一个在Axis2.1.5中调用Web Service客户端的Junit测试,而对于如何准确地将其设置为使用WS- Addressing感到困惑。 我已经使用wsdl2java生成了一个客户端存根,并且正在使用axis2二进制发行版中的axis2.xml和模块存储库。 我知道我需要使用WS-Addressing的MemberSubmission版本,并且我 认为 我已经
是否可以将WS-Addressing与解耦的endpoint一起使用,但不使用Jetty,只使用ServletDestination? 我得到了以下异常,并且我的SOAP标头包含任何错误的回复To地址: 有效载荷: 有人有线索吗?