Публикация собственного веб-сервиса на JBoss SOA - PullRequest
4 голосов
/ 07 февраля 2011

Я бью себя за стену с этим, в настоящее время у меня есть две конечные точки веб-службы, настроенные и работающие в JBoss Soa 5, и, как в стандарте 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, для публикации этих двух операций в одном сервисе proxy, перенаправляющем потоки на уже определенные сервисы ErrorsSubmit и TransactionsSubmit.

Это возможно сделать?

Примечание. Я мог бы развернуть свою собственную службу WSDL, добавив приложение WAR в пакет ESB, но не могу перенаправить поток во внутренние службы.

Ответы [ 2 ]

0 голосов
/ 29 марта 2011

Через несколько недель я смог найти способ сделать это.По умолчанию не существует настраиваемого способа перенаправления из WS-операции в ESB-службу, но вы можете сделать это программно.

Это WS-операция:

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;
}
0 голосов
/ 09 марта 2011

Полагаю, все, что вам нужно, это маршрутизатор на основе контента с мыльными клиентами.

...