Apache Camelを使用してWebサービスリクエストを処理する3つの方法
5362 ワード
1:
まず、Webサービスを公開するためのインタフェースを書きます.
二:webサービスの公開
ブループリントでxmlは次の構成に追加されます.
そして、アクセスhttp://127.0.0.1:9911/ws/calc?wsdl パブリッシュに成功したかどうかを確認
三:webサービス要求を処理するには、以下の3つの方法がある.
(1)
プロセス実装orgを書く.apache.camel.プロセスインタフェースはwsリクエストを処理します
ルーティングの構成は次のとおりです.
(2)
クラスを書き、N(Nはインタフェースのメソッドの個数)のメソッドがあり、各メソッドのパラメータはorgである.apache.camel.Exchange
ルーティングの構成は次のとおりです.
ここでは主にCamelBeanMethodNameを用いて実行する方法を動的に区別する
(3)
上のインタフェースの実装クラスを書いてwsの要求を処理します
ルーティングの構成は次のとおりです.
ここでもCamelBeanMethodNameを使用して実行する方法を動的に区別します
上のCamelBeanMultiparamerArrayに注意してください.インタフェースのすべてのメソッドのパラメータ数が1つでない限り、これを追加する必要があります.
まず、Webサービスを公開するためのインタフェースを書きます.
package com.pp.ws;
import javax.jws.WebMethod;
import javax.jws.WebService;
/**
*
*/
@WebService
public interface Calculator
{
@WebMethod
public String getVersion(String request);
@WebMethod
public Long add(Integer a, Integer b);
@WebMethod
public Long subtract(Integer a, Integer b);
@WebMethod
public Long multiply(Integer a, Integer b);
}
二:webサービスの公開
ブループリントでxmlは次の構成に追加されます.
<cxf:cxfEndpoint id="calcWSEndpoint"
serviceClass="com.pp.ws.Calculator"
address="http://127.0.0.1:9911/ws/calc" />
そして、アクセスhttp://127.0.0.1:9911/ws/calc?wsdl パブリッシュに成功したかどうかを確認
三:webサービス要求を処理するには、以下の3つの方法がある.
(1)
プロセス実装orgを書く.apache.camel.プロセスインタフェースはwsリクエストを処理します
package com.pp.ws;
import org.apache.camel.Exchange;
import org.apache.camel.Processor;
import org.apache.cxf.message.MessageContentsList;
public class CalculatorProcessor implements Processor
{
/**
* operatioNname , ( )
*/
public void process(Exchange exchange) throws Exception
{
MessageContentsList args = exchange.getIn().getBody(MessageContentsList.class);
String method = exchange.getIn().getHeader("operatioNname", String.class);
if("getVersion".equals(method))
{
exchange.getOut().setBody("2.14.1");
return;
}
Object arg1 = args.get(0);
Object arg2 = args.get(1);
Integer a = Integer.valueOf(arg1.toString());
Integer b = Integer.valueOf(arg2.toString());
if("add".equals(method))
{
exchange.getOut().setBody(Long.valueOf(a + b));
}
else if("subtract".equals(method))
{
exchange.getOut().setBody(Long.valueOf(a - b));
}
else if("multiply".equals(method))
{
exchange.getOut().setBody(Long.valueOf(a * b));
}
}
}
ルーティングの構成は次のとおりです.
<bean id="calcProcessor" class="com.pp.ws.CalculatorProcessor" />
<route>
<from uri="calcWSEndpoint" />
<to uri="bean:calcProcessor" />
</route>
(2)
クラスを書き、N(Nはインタフェースのメソッドの個数)のメソッドがあり、各メソッドのパラメータはorgである.apache.camel.Exchange
package com.pp.ws;
import org.apache.camel.Exchange;
import org.apache.cxf.message.MessageContentsList;
public class CalculatorMutProcessor
{
/**
* Exchange , ,
* :exchange.getOut().setBody()
*/
public void add(Exchange exchange)
{
MessageContentsList args = exchange.getIn().getBody(MessageContentsList.class);
Integer a = Integer.valueOf(args.get(0).toString());
Integer b = Integer.valueOf(args.get(1).toString());
exchange.getOut().setBody(Long.valueOf(a + b));
}
public void subtract(Exchange exchange)
{
MessageContentsList args = exchange.getIn().getBody(MessageContentsList.class);
Integer a = Integer.valueOf(args.get(0).toString());
Integer b = Integer.valueOf(args.get(1).toString());
exchange.getOut().setBody(Long.valueOf(a - b));
}
public void multiply(Exchange exchange)
{
MessageContentsList args = exchange.getIn().getBody(MessageContentsList.class);
Integer a = Integer.valueOf(args.get(0).toString());
Integer b = Integer.valueOf(args.get(1).toString());
exchange.getOut().setBody(Long.valueOf(a * b));
}
public void getVersion(Exchange exchange)
{
exchange.getOut().setBody("2.14.1");
}
}
ルーティングの構成は次のとおりです.
<bean id="calculatorMutProcessor" class="com.pp.ws.CalculatorMutProcessor" />
<route>
<from uri="calcWSEndpoint" />
<setHeader headerName="CamelBeanMethodName">
<simple>${in.header.operatioNname}</simple>
</setHeader>
<to uri="bean:calculatorMutProcessor" />
</route>
ここでは主にCamelBeanMethodNameを用いて実行する方法を動的に区別する
(3)
上のインタフェースの実装クラスを書いてwsの要求を処理します
package com.pp.ws;
public class CalculatorImpl implements Calculator
{
public String getVersion(String request)
{
System.out.println(request);
return "2.14.1";
}
public Long add(Integer a, Integer b)
{
System.out.println(a + ", " + b);
return Long.valueOf(a + b);
}
public Long subtract(Integer a, Integer b)
{
System.out.println(a + ", " + b);
return Long.valueOf(a - b);
}
public Long multiply(Integer a, Integer b)
{
System.out.println(a + ", " + b);
return Long.valueOf(a * b);
}
}
ルーティングの構成は次のとおりです.
<bean id="calculatorImpl" class="com.pp.ws.CalculatorImpl" />
<route>
<from uri="calcWSEndpoint" />
<setHeader headerName="CamelBeanMethodName">
<simple>${in.header.operationName}</simple>
</setHeader>
<setHeader headerName="CamelBeanMultiParameterArray">
<constant>true</constant>
</setHeader>
<to uri="bean:calculatorImpl" />
</route>
ここでもCamelBeanMethodNameを使用して実行する方法を動的に区別します
上のCamelBeanMultiparamerArrayに注意してください.インタフェースのすべてのメソッドのパラメータ数が1つでない限り、これを追加する必要があります.