0

我尝试使用 JBoss Fuse/Camel 创建路由器并成功部署。

<camelContext id="blueprintContext"
                trace="false"
                xmlns="http://camel.apache.org/schema/blueprint">
    <route id="httpBridge">
      <from uri="jetty:http://mysystem:8282/CreateAccountService?matchOnUriPrefix=true"/>
      <to uri="jetty:http://mysystem:8080/service/services/CreateAccountService?bridgeEndpoint=true&amp;throwExceptionOnFailure=false"/>
    </route>
  </camelContext>  

能够使用代理访问服务。

我在 wsdl 中将 xsd 用于数据类型。

<wsdl:types>
<xsd:schema xmlns:fault="http://www.sample.project.com.au/common/message/FaultMessage/v1" xmlns:pref="http://www.sample.project.com.au/services/account/CreateAccount/CreateAccountRequest/v1" xmlns:pref1="http://www.sample.project.com.au/services/account/CreateAccount/CreateAccountResponse/v1" xmlns:pref2="http://www.sample.project.com.au/common/message/TechnicalException/v1" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://www.sample.project.com.au/services/account/CreateAccount/v1" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.sample.project.com.au/services/account/CreateAccount/v1">
<xsd:import namespace="http://www.sample.project.com.au/services/account/CreateAccount/CreateAccountRequest/v1" schemaLocation="http://mysystem:8080/service/services/CreateAccountService?xsd=CreateAccountRequest.xsd"></xsd:import>
<xsd:import namespace="http://www.sample.project.com.au/services/account/CreateAccount/CreateAccountResponse/v1" schemaLocation="http://mysystem:8080/service/services/CreateAccountService?xsd=CreateAccountResponse.xsd"></xsd:import>
</xsd:schema>
</wsdl:types>

http://mysystem:8282/CreateAccountService?wsdl(代理人)

但是,我可以在 wsdl 中看到所有 xsd 详细信息

<xsd:import namespace="http://www.sample.project.com.au/services/account/CreateAccount/CreateAccountRequest/v1" schemaLocation="http://mysystem:8080/service/services/CreateAccountService?xsd=CreateAccountRequest.xsd"></xsd:import>

这是架构的原始网址。

http://mysystem:8080/service/services/CreateAccountService?xsd=CreateAccountRequest.xsd

我也想隐藏这个细节。

但是,我能够看到所有带有实际 url 详细信息的架构。

如何为 URI 中的所有内容创建代理。

如果我不清楚我的问题,请告诉我。

4

1 回答 1

0

1)

您需要在返回给客户端之前处理回复消息(使用消息翻译器 eip http://camel.apache.org/message-translator.html),因此您可以将消息正文中的 url 替换为实际 url,到代理网址

例如,您可以将 bean 与执行搜索/替换的单个方法一起使用

public String transformTheMessage(String body) {
  ...
  ... search for the url you want to replace
}

然后在xml文件中定义一个bean,在Camel路由中使用

<route id="httpBridge">
      <from uri="jetty:http://mysystem:8282/CreateAccountService?matchOnUriPrefix=true"/>
      <to uri="jetty:http://mysystem:8080/service/services/CreateAccountService?bridgeEndpoint=true&amp;throwExceptionOnFailure=false"/>
      <to uri="bean:myBean"/>
    </route>

2)

或者检查请求是否针对 WSDL 并执行基于内容的路由器,并从您在代理服务器上拥有的文件中返回内容 - 并且该文件具有硬编码的代理 url 等。 http://camel.apache.org /content-based-router.html

3)

或者看看这个例子

于 2014-03-18T07:31:39.870 回答