soap - 在 Mule Flows 中使用 SOAP 配置 HTTP 端点

标签 soap cxf mule

我正在尝试使用 Mule Flows 在 Mule 中配置现有的 SOAP Web 服务。我有一个带有请求/响应的 HTTP 端点和一个 SOAP 组件,比如服务 A。

Simple SOAP flow
我想配置此设置以实现简单的工作流程。我已经设置了我的 HTTP 端点和 SOAP 服务。流文件如下所示。

    <?xml version="1.0" encoding="UTF-8"?>

<mule xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:http="http://www.mulesoft.org/schema/mule/http" xmlns:cxf="http://www.mulesoft.org/schema/mule/cxf" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation" xmlns:spring="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="CE-3.2.1" xsi:schemaLocation="
http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd 
http://www.mulesoft.org/schema/mule/cxf http://www.mulesoft.org/schema/mule/cxf/current/mule-cxf.xsd 
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd ">
    <flow name="demoflowFlow1" doc:name="demoflowFlow1">
        <http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="8081" doc:name="HTTP"/>
        <cxf:jaxws-service port="8082" serviceClass="com.myapp.serviceA.ServiceAImplService" doc:name="SOAP"/>
    </flow>
</mule>

这是行不通的。我的服务是一个简单的服务,它接受一个字符串并返回一个字符串。
@WebService(targetNamespace = "http://service.demo.myapp.com/", endpointInterface = "com.myapp.demo.service.IServiceA", portName = "ServiceAImplPort", serviceName = "ServiceAImplService")
public class ServiceAImpl implements IServiceA {
    public String hello(String user) {
        return "at service A: " + user;
    }
}

我正在使用 HTTP 入站 URL http://localhost:8081/ 调用我的流程{我不确定这里发生了什么!}并得到:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<soap:Fault>
<faultcode>soap:Server</faultcode>
<faultstring>No such operation: (HTTP GET PATH_INFO: /)</faultstring>
</soap:Fault>
</soap:Body>
</soap:Envelope>

Mule 流在 Mule Studio 中作为应用程序运行,而服务作为 Springsource 工具套件中的 SOAP Web 服务运行。

我究竟做错了什么?

原始 WSDL 位于 http://localhost:8080/ServiceA/services/ServiceAImplPort?wsdl
<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://service.demo.myapp.com/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="ServiceAImplService" targetNamespace="http://service.demo.myapp.com/">
<wsdl:types>
<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://service.demo.myapp.com/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<import namespace="http://service.demo.myapp.com/" schemaLocation="http://localhost:8080/ServiceA/services/ServiceAImplPort?xsd=serviceaimpl_schema1.xsd"/>
</schema>
</wsdl:types>
<wsdl:message name="helloResponse">
<wsdl:part element="tns:helloResponse" name="parameters"></wsdl:part>
</wsdl:message>
<wsdl:message name="hello">
<wsdl:part element="tns:hello" name="parameters"></wsdl:part>
</wsdl:message>
<wsdl:portType name="IServiceA">
<wsdl:operation name="hello">
<wsdl:input message="tns:hello" name="hello"></wsdl:input>
<wsdl:output message="tns:helloResponse" name="helloResponse"></wsdl:output>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="ServiceAImplServiceSoapBinding" type="tns:IServiceA">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="hello">
<soap:operation soapAction="urn:Hello" style="document"/>
<wsdl:input name="hello">
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output name="helloResponse">
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="ServiceAImplService">
<wsdl:port binding="tns:ServiceAImplServiceSoapBinding" name="ServiceAImplPort">
<soap:address location="http://localhost:8080/ServiceA/services/ServiceAImplPort"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>

仅供引用,我可以毫无问题地从 SpringSource 工具套件运行 Web 服务。现在,如何使用 GET 请求从我的 HTTP 入站 URL 调用 Web 服务?
[我假设像这样的简单 Web 服务接受 GET 请求。]

最佳答案

我认为您忘记了方法中的 @WebMethod 注释。这基本上就是你的错误所说的:没有操作。

Here是一个很好的例子,你可以如何做到这一点。

@WebService(targetNamespace = "http://service.demo.myapp.com/", endpointInterface = "com.myapp.demo.service.IServiceA", portName = "ServiceAImplPort", serviceName = "ServiceAImplService")
public class ServiceAImpl implements IServiceA {
    @WebMethod
    @WebResult(name="result")
    public String hello(@WebParam(name="user")String user) {
        return "at service A: " + user;
    }
}

关于soap - 在 Mule Flows 中使用 SOAP 配置 HTTP 端点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10040137/

相关文章:

java - 当我不知道密码时使用 WS-Security 进行身份验证

mule - ESB mule - Data Weaver 转换

http - 如何向 mule 负载添加额外数据?

php - 使用 php 客户端使用 Web 服务(Soap)

java - 如何在 SOAP 的服务器端启用 CXF pretty-print 日志记录?

java - CXFServlet 抛出 java.lang.NoSuchMethodError : org. codehaus.stax2.ri.EmptyIterator.getInstance()Lorg/codehaus/stax2/ri/EmptyIterator;

java - 通过 Spring XML 使用 CXF-RS 客户端配置 Camel Producer

mule - 具有相同属性名称的 xml 元素被覆盖

Python - 在 NetSuite 中创建/读取/更新/删除记录

c# - 将 soap XML 解析为 C# 类