Citrus Simulator场景设置Endpoint URI遇EndpointNotFound错误求助
解决Citrus Simulator中SOAP端点映射找不到的问题
我看你这里是把Citrus里.endpoint()和.operation()的用法搞混啦,这正是导致EndpointNotFound错误的核心原因!
问题根源
在Citrus的SOAP场景构建中:
.endpoint()方法的作用是指定你要监听/交互的SOAP服务器端点地址(比如/lov-service或者完整URL)- 而SOAP请求的操作QName(就是你写的
{http://www.sikorsoftware.com/lov/schemas}LOVRequest)应该用.operation()方法来指定,用来匹配收到的SOAP消息的操作
你现在把操作QName传给了.endpoint(),Citrus找不到对应地址的端点,自然就报错了。
具体修正步骤
1. 先配置SOAP服务器端点
首先需要在Citrus配置中定义一个SOAP服务器端点,这里以Java配置为例:
@Bean public ServerEndpoint lovServiceEndpoint() { return new SoapServerEndpointBuilder() .port(8080) // 监听端口 .path("/lov-service") // 端点路径 .build(); }
如果是用XML配置的话,写法是这样:
<citrus:soap-server id="lovServiceEndpoint" port="8080" path="/lov-service"/>
2. 修改场景代码,区分端点和操作
把原来的.endpoint()替换为.operation()来指定SOAP操作,同时用.endpoint()指向你配置的端点ID:
@Override public void run(ScenarioDesigner scenario) { scenario .soap() .receive() .endpoint("lovServiceEndpoint") // 引用配置的端点Bean ID .operation("{http://www.sikorsoftware.com/lov/schemas}LOVRequest") // 指定SOAP操作QName .payload("<ns2:LOVRequest xmlns:ns2=\"http://www.sikorsoftware.com/lov/schemas\"><ns2:id>123456</ns2:id></ns2:LOVRequest>"); scenario .soap() .send() .payload("<LOVResponse xmlns=\"http://www.sikorsoftware.com/lov/schemas\">" + "Hi there!" + "</LOVResponse>"); }
额外小提示
- 如果你不想单独配置端点Bean,也可以直接在
.endpoint()中写完整的端点URL,比如http://localhost:8080/lov-service,但用配置Bean的方式更便于复用和维护。 - 要确保SOAP操作的命名空间和名称和你的WSDL定义完全一致,否则Citrus还是无法匹配到对应的请求。
内容的提问来源于stack exchange,提问作者Michael Z
相关产品推荐
相关产品推荐

