[Java] Publicar servicio web personalizado en JBoss SOA


Answers

Después de varias semanas pude encontrar la manera de hacerlo. De forma predeterminada, no hay una forma configurable para redirigir desde una operación de WS a un servicio de ESB, pero puede hacerlo mediante programación.

Esta es la operación 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;
}
Question

Estoy llegando a una pared con esto, actualmente tengo dos puntos finales de servicio web configurados y en ejecución en JBoss Soa 5 y, como en el estándar ESB, cada punto final se publica como una operación individual.

Un punto final para la presentación de la transacción:

<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>

y otro para la presentación de errores:

<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>

Lo que quiero hacer es crear un servicio web personalizado usando mi propio archivo WSDL para publicar estas dos operaciones en un solo servicio de proxy redirigiendo los flujos a los servicios ya definidos ErrorsSubmit y TransactionsSubmit .

Es posible hacer esto?

Nota: Podría implementar mi propio servicio WSDL agregando una aplicación WAR al paquete ESB, pero no puedo redirigir el flujo a los servicios internos.