当前位置: 首页 > 知识库问答 >
问题:

Mule ESB中的Ws-Addressing功能

乐正锦
2023-03-14

我正在构建一个基于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服务会自动响应?

当做

共有1个答案

蓝昊然
2023-03-14

这就是为什么我喜欢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地址: 有效载荷: 有人有线索吗?