2016-07-01 17 views
3

ich http Balancer durch die Camel machen (installieren JBoss Sicherung vor dem http://www.jboss.org/products/fuse/download/Wie fügen Sie Transformation zu Camel http-balancer in Spring XML hinzu?

%fuse_dir%=c:\temp\jboss-fuse-6.2.1.redhat-084 
%path%=%path%;%fuse_dir%\bin; 

)

git clone https://github.com/mishin/http-balancer-camel.git 
cd http-balancer-camel/smx-ws-examples-jboss-fuse-6.2.1 
mvn clean install 
fuse console 

in Sicherungskonsole wir

JBossFuse:[email protected]> features:addurl mvn:com.fusesource.examples/ws-features/1.0-SNAPSHOT/xml/features 
JBossFuse:[email protected]> features:install smx-ws-examples 
JBossFuse:[email protected]> list | grep Examples 
JBossFuse:[email protected]> log:Display 

schreiben, die unsere Prüfdienstleistungen starten Jetzt haben wir 3 Dienste:
http://localhost:9091/greeterProxy?wsdl
http://localhost:9090/greeter?wsdl
http://localhost:9090/greeterImpl?wsdl

so bauen wir Balancer

git clone https://github.com/mishin/http-balancer-camel.git 
cd http-balancer-camel/camel-gateway 
mvn -Djava.net.preferIPv4Stack=true camel:run 

so kurzer Code ist
https://github.com/mishin/http-balancer-camel/blob/master/camel-gateway/src/main/resources/META-INF/spring/applicationContext.xml

<camelContext trace="false" id="greeterGateway" xmlns="http://camel.apache.org/schema/spring"> 
    <route id="proxyRoute"> 
    <from uri="jetty:http://localhost:9092/greeterProxy?matchOnUriPrefix=true"/> 
    <loadBalance> 
     <failover> 
     <exception>java.io.IOException</exception> 
     </failover> 
     <to uri="jetty:http://localhost:9090/greeterImpl?bridgeEndpoint=true&amp;throwExceptionOnFailure=false"/> 
     <to uri="jetty:http://localhost:9090/greeter?bridgeEndpoint=true&amp;throwExceptionOnFailure=false"/> 
     <convertBodyTo type="java.lang.String"/> 
    </loadBalance> 
    </route> 
</camelContext> 

ich machen Failover http-Balancer
so, wenn ich von Web-Browser
http://localhost:9092/greeterProxy?wsdl
als ich bekam

<wsdl:definitions xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://impl.greeter.examples.fusesource.com/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:ns3="http://schemas.xmlsoap.org/soap/http" xmlns:ns1="http://examples.fusesource.com/greeter" name="ConcreteGreeterService" targetNamespace="http://impl.greeter.examples.fusesource.com/"> 
<wsdl:import location="http://localhost:9090/greeterImpl?wsdl=Greeter.wsdl" namespace="http://examples.fusesource.com/greeter"></wsdl:import> 
<wsdl:binding name="ConcreteGreeterServiceSoapBinding" type="ns1:Greeter"> 
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> 
<wsdl:operation name="greetMe"> 
<soap:operation soapAction="" style="document"/> 
<wsdl:input name="greetMe"> 
<soap:body use="literal"/> 
</wsdl:input> 
<wsdl:output name="greetMeResponse"> 
<soap:body use="literal"/> 
</wsdl:output> 
</wsdl:operation> 
<wsdl:operation name="pingMe"> 
<soap:operation soapAction="" style="document"/> 
<wsdl:input name="pingMe"> 
<soap:body use="literal"/> 
</wsdl:input> 
<wsdl:output name="pingMeResponse"> 
<soap:body use="literal"/> 
</wsdl:output> 
<wsdl:fault name="PingMeFault"> 
<soap:fault name="PingMeFault" use="literal"/> 
</wsdl:fault> 
</wsdl:operation> 
<wsdl:operation name="greetMeOneWay"> 

... nennen muss ich Transformation Änderung

<wsdl:output name="pingMeResponse"> 

zu

<wsdl:output name="pingAnotherResponse"> 

Ich mache tyr es durch einfache Transformation, zum Beispiel

<convertBodyTo type="java.lang.String" /> 
    <transform> 
     <simple>${in.body.replaceAll("greet([A-Z])Response", "bar$1foo")}</simple> 
    </transform> 

vollständige Code ist:

<camelContext trace="false" id="greeterGateway" xmlns="http://camel.apache.org/schema/spring"> 
    <route id="proxyRoute"> 
     <from uri="jetty:http://localhost:9092/greeterProxy?matchOnUriPrefix=true" /> 
     <loadBalance> 
      <failover> 
       <exception>java.io.IOException</exception> 
      </failover> 
      <to uri="jetty:http://localhost:9090/greeterImpl?bridgeEndpoint=true&amp;throwExceptionOnFailure=false" /> 
      <to uri="jetty:http://localhost:9090/greeter?bridgeEndpoint=true&amp;throwExceptionOnFailure=false" /> 
      <convertBodyTo type="java.lang.String" /> 
     </loadBalance> 

     <convertBodyTo type="java.lang.String" /> 
     <transform> 
      <simple>${in.body.replaceAll("greet([A-Z])Response", "bar$1foo")}</simple> 
     </transform> 

    </route> 
</camelContext> 

aber es überhaupt
funktioniert nicht, wenn ich http://localhost:9092/greeterProxy?wsdl
aufrufen es ersetzt nicht

<wsdl:output name="pingMeResponse"> 

warum?

Antwort

2

FailOverLoadBalancer verwendet asynchrone Routing-Engine, was bedeutet, dass Ihr Transformationsblock die Antwort nicht trifft. Versuchen Sie, direkte Endpunkte zu verwenden, und fügen Sie den Transformationscode in separate Routen ein (von direct-> zu jetty-> transform). Das sollte helfen.