java service example - Publicar servicio web personalizado en JBoss SOA




1 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;
}
client from wsdl

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.




Related