Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache camel 使用Camel实现cxfweb服务_Apache Camel - Fatal编程技术网

Apache camel 使用Camel实现cxfweb服务

Apache camel 使用Camel实现cxfweb服务,apache-camel,Apache Camel,我正在尝试使用camelcxf组件公开代码优先的Web服务。通过组合一些可用的示例,我得出了以下路线定义: <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:camel="http://camel.apache.org/schema/spring" xmlns:cxf="http://ca

我正在尝试使用camelcxf组件公开代码优先的Web服务。通过组合一些可用的示例,我得出了以下路线定义:

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:camel="http://camel.apache.org/schema/spring"
    xmlns:cxf="http://camel.apache.org/schema/cxf" xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="
       http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
       http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd
       http://camel.apache.org/schema/cxf http://camel.apache.org/schema/cxf/camel-cxf.xsd">

    <bean id="productServiceImpl" class="com.demo.ws.CustomerServiceImpl" />

    <camelContext xmlns="http://camel.apache.org/schema/spring">

        <route>
            <from uri="cxf:bean:productServiceEndpoint" />

            <bean ref="productServiceImpl" />
            <!-- log input received -->
            <to uri="log:output" />
        </route>


    </camelContext>
    <cxf:cxfEndpoint id="productServiceEndpoint"
        address="http://localhost:9001/productService" serviceClass="com.demo.ws.CustomerService" />


</beans>
运行项目时,将正确调用Webservice实现类,并返回字符串“Hello[name]”,但从SOAPUI返回的正文为空:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
   <soap:Body/>
</soap:Envelope>

您能帮我在响应中生成返回值吗?
谢谢

您应该返回一条SOAP消息:

        SOAPMessage soapMessage = MessageFactory.newInstance().createMessage();
        SOAPBody body = soapMessage.getSOAPPart().getEnvelope().getBody();

        QName payloadName = new QName("http://apache.org/hello_world_soap_http/types", "greetMeResponse", "ns1");

        SOAPBodyElement payload = body.addBodyElement(payloadName);

        SOAPElement message = payload.addChildElement("responseType");

        message.addTextNode("Your custom message");
        return soapMessage;

您还可以查看驼峰文档示例:

谢谢您的回复。我看了一下文件和链接。主要的问题是我必须为每个方法创建一个payloadName。我想知道是否可以从Web服务(将返回字符串包装在消息中)@user2824073自动生成SOAP响应,这将违反SOA原则。每个方法都应该明确定义和文档化,以便开发人员能够以最小的工作量使用生成的WSDL。根据我的理解,根据你的评论,你想要一种返回不同答案的方法吗?请澄清
        SOAPMessage soapMessage = MessageFactory.newInstance().createMessage();
        SOAPBody body = soapMessage.getSOAPPart().getEnvelope().getBody();

        QName payloadName = new QName("http://apache.org/hello_world_soap_http/types", "greetMeResponse", "ns1");

        SOAPBodyElement payload = body.addBodyElement(payloadName);

        SOAPElement message = payload.addChildElement("responseType");

        message.addTextNode("Your custom message");
        return soapMessage;