如何在 Apache Camel 中更改 SOAP Web 服务端点 URL 和 WSDL URL

Posted

技术标签:

【中文标题】如何在 Apache Camel 中更改 SOAP Web 服务端点 URL 和 WSDL URL【英文标题】:How to change SOAP Web service Endpoint URL and WSDL URL in Apache Camel 【发布时间】:2017-10-26 10:07:29 【问题描述】:

要求 SOAP WSDL Url 和 Endpoint URL 必须彼此不同。我在下面使用 Apache Camel 和 Apache CXF 是我的蓝图,但是当我在端口 8043 请求时,当我将其更改为 9143 时,那里没有 wsdl。

需要在url上暴露wsdl:http://0.0.0.0:8043/Services/Interface/FSServices/FSServices.serviceagent?wsdl

端点 URL 为:http://0.0.0.0:9143/Services/Interface/FSServices/FSServices.serviceagent/PortTypeEndpoint1/

<cxf:cxfEndpoint
        address="http://0.0.0.0:8043/Services/Interface/FSServices/FSServices.serviceagent"
        id="fsEndpoint" serviceClass="pk.com.herman.fs.operation.PortType">
        <cxf:properties>
            <entry key="publishedEndpointUrl" value="http://0.0.0.0:9143/Services/Interface/FSServices/FSServices.serviceagent/PortTypeEndpoint1/"/>
        </cxf:properties>
    </cxf:cxfEndpoint>

【问题讨论】:

所以更改两个端口号。你有两个 IP 地址。 【参考方案1】:

奇怪的要求。您可以通过添加一个禁用 WSDLGetInterceptor 拦截器的拦截器来做到这一点。

添加拦截器

<bean id="removeWSDLinterceptor"
    class="my.package.RemoveWSDLInterceptor" />

<cxf:cxfEndpoint address="http://0.0.0.0:8043/Services/Interface/FSServices/FSServices.serviceagent"
    id="fsEndpoint" serviceClass="pk.com.herman.fs.operation.PortType">
    <cxf:inInterceptors>
        <ref bean="removeWSDLinterceptor" />
    </cxf:inInterceptors>
</cxf:cxfEndpoint>

拦截器

public class RemoveWSDLInterceptor extends AbstractPhaseInterceptor<Message> 


public RemoveWSDLInterceptor() 

    super(Phase.RECEIVE);


public void handleMessage(Message message) 
    WSDLGetInterceptor getWSDLInterceptor = null;
    InterceptorChain chain = message.getInterceptorChain();

    for(Iterator<Interceptor<? extends Message>> iter = chain.iterator(); iter.hasNext();) 
        Interceptor getWSDLInterceptor = iter.next();
        if (interceptor instanceof WSDLGetInterceptor) 
            getWSDLInterceptor = (WSDLGetInterceptor) interceptor;
        
    
    chain.remove(getWSDLInterceptor);


public void handleFault(Message messageParam) 


然后你可以添加一个小码头路由来静态返回 WSDL。

<route>
        <from uri="jetty://http://0.0.0.0:9143" />
        <to uri="language:constant:resource:file:/path/to/your/wsdlfile.wsdl"/>
</route>

【讨论】:

以上是关于如何在 Apache Camel 中更改 SOAP Web 服务端点 URL 和 WSDL URL的主要内容,如果未能解决你的问题,请参考以下文章

使用 apache-camel [2.24.3] 使用 SOAP 服务时出错

如何使用 Apache Camel 来监控文件更改?

Apache Camel ProducerTemplate忽略SSL证书检查

将更改日志转换为 Apache Camel 中的实际状态

Camel 的编组问题,无法正确编组 SOAP 请求?

如何在apache camel中附加速度文件内容