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

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

束作人
2023-03-14

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

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

endpointURL be: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>

共有1个答案

伯洋
2023-03-14

奇怪的要求。您可以通过添加禁用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) {
}
}

然后,您可以添加一个小的jetty路由来静态返回WSDL。

<route>
        <from uri="jetty://http://0.0.0.0:9143" />
        <to uri="language:constant:resource:file:/path/to/your/wsdlfile.wsdl"/>
</route>
 类似资料:
  • 我有数据库名称:PMKIT,前缀Table:PMKIT.TableName。我想重命名PMKIT。TableName到DBO.TableName。你能帮助我吗!

  • 问题内容: 我在本地计算机上使用。在我们的网络服务器上,我们有。我们的服务器是共享服务器。所以我想通过文件更改我们服务器上的php版本。有可能做到吗?如果是,该怎么办? 问题答案: 要切换到PHP 4.4: 要切换到PHP 5.0: 要切换到PHP 5.1: 要切换到PHP 5.2: 要切换到PHP 5.3,请执行以下操作: 要切换到PHP 5.4: 要切换到PHP 5.5: 要切换到PHP 5.

  • 我的应用程序部署和服务运行在AWS EKS集群中。通过添加此注释服务,该服务将公开为NLB类型的负载平衡器。贝塔。库伯内特斯。io/aws负载平衡器类型:nlb,但当我试图通过将注释更改为service将其切换为ALB时。贝塔。库伯内特斯。io/aws负载平衡器类型:alb它创建了一个经典的负载平衡器,这意味着不考虑此注释,所以有没有办法在alb上公开服务?

  • 我们在生产Websphere liberty概要文件中使用mobilefirst 6.3。 mobilefirst中是否有方法更改默认日志文件,而不使用一些自定义java函数来记录?我们希望将适配器中的日志与服务器日志分开。

  • 问题内容: 我正在构建一个快速的Web搜寻器,并且需要具有多线程DNS解析,因此我选择了一个名为dnsjava的多线程DNS服务提供商。不幸的是,我不知道如何替换默认的DNS服务提供商。 我查看了dnsjava 的README文件,但说明不是很完整。 替换标准的Java DNS功能: 从Java 1.4开始,可以在运行时加载服务提供者。要加载dnsjava服务提供者,请按照上述说明进行构建并设置系

  • 我从基于apache-camel-spark的rest接口获得一个json数组作为输入。开始时,我想通过apache camels路线分割json-array来处理每个元素。我该怎么做? 我的测试输入json: 对于这个问题,我在stackoverflow上找到了一些间接描述的问题: link 1, link 2, link 3。 根据这些示例,我尝试了以下骆驼路线: 当我这样做时,我总是得到以下