我正在使用它,目前我在JBoss Soa 5中配置并运行了两个Web服务端点,并且在ESB标准中,每个端点都作为单独的操作发布。
交易提交的一个终点:
<service description="writes Transactions to DB." name="TransactionsSubmit">
<listeners>
<jms-listener busidref="transactionSubmitChannel" name="transactionSubmit" />
</listeners>
<actions faultXsd="/resources/xsd/transactions-fault.xsd"
inXsd="/resources/xsd/ws-submit-trx.xsd"
mep="RequestResponse"
outXsd="/resources/xsd/ws-trx-response.xsd">
<action class="org.timo.service.SubmitTransaction">
</action>
</actions>
</service>
和其他错误提交:
<service description="writes errors to DB." name="ErrorsSubmit">
<listeners>
<jms-listener busidref="errorSubmitChannel" name="errorSubmit" />
</listeners>
<actions faultXsd="/resources/xsd/transactions-fault.xsd"
inXsd="/resources/xsd/ws-errorsubmit-trx.xsd"
mep="RequestResponse"
outXsd="/resources/xsd/ws-errorsubmit-response.xsd">
<action class="org.timo.service.SubmitError">
</action>
</actions>
</service>
我想要做的是使用我自己的WSDL文件创建自定义Web服务,以便在单个proxy
服务中发布这两个操作,将流重定向到已定义的服务ErrorsSubmit
和{ {1}}。
可以这样做吗?
注意:我可以通过向ESB包添加WAR应用程序来部署自己的WSDL服务,但我无法将流重定向到内部服务。
答案 0 :(得分:0)
我相信你所需要的只是一个基于内容的路由器,配有肥皂客户端。
答案 1 :(得分:0)
几周后我就能找到办法。默认情况下,没有可配置的方法从WS操作重定向到ESB服务,但您可以通过编程方式执行此操作。
这是WS-operation:
public Response submitTransaction(final TransactionRequest request) throws CommonFault {
log.info("submitTransaction : "+ request.getId());
JAXBElement<TransactionResponse> response = invokeService("TransactionsSubmit", objectFactory.createSubmitTransactionRequest(request));
return response.getValue();
}
private <T> JAXBElement<T> invokeService(final String serviceName, final JAXBElement<?> request) {
log.info("Invoking service : " + serviceName + "()");
JAXBElement<T> response = null;
try {
ServiceInvoker serviceInvoker = new ServiceInvoker("myservice", serviceName);
Message message = org.jboss.soa.esb.message.format.MessageFactory.getInstance().getMessage();
message.getBody().add(jaxbHandler.serialize(request));
Message esbResponse = serviceInvoker.deliverSync(message, 5000);
log.info("Response : " + esbResponse.getBody().get().toString());
response = deserialize(esbResponse.getBody().get().toString());
} catch (Exception e) {
log.error(e, e);
}
return response;
}