JAXRPCMessageProcessorpublic class JAXRPCMessageProcessor extends com.sun.enterprise.jbi.serviceengine.comm.MessageProcessor Process a MEP for a new incoming message from NMR.
Processing always happen in a new thread. |
Fields Summary |
---|
protected static final Logger | logger | com.sun.xml.rpc.spi.JaxRpcObjectFactory | rpcFactory |
Methods Summary |
---|
private void | debug(java.util.logging.Level logLevel, java.lang.String msgID, java.lang.Object[] params)
logger.log(logLevel, msgID, params);
| public void | doWork()Actual code that starts processing the MEP.
try {
// Add code here to process the received message.
MessageExchange me = getMessageExchange();
String endpoint = me.getEndpoint().getEndpointName();
QName service = me.getEndpoint().getServiceName();
SOAPMessage response = null;
MessageExchangeHelper meHelper = new MessageExchangeHelper();
meHelper.setMessageExchange(me);
try {
debug(Level.FINEST,"serviceengine.process_incoming_request",
new Object[]{service.getLocalPart(), endpoint});
EjbRuntimeEndpointInfo runtimeEndpointInfo =
(EjbRuntimeEndpointInfo)RuntimeEndpointInfoRegistryImpl.getInstance().
getRuntimeEndpointInfo(service, endpoint);
response = processEJBRequest(
meHelper.denormalizeMessage(true), runtimeEndpointInfo);
} catch(Throwable e) {
logger.log(Level.SEVERE, "serviceengine.error_incoming_request", e);
ServiceEngineException seException = new ServiceEngineException(e);
meHelper.handleException(seException);
}
meHelper.handleResponse(response, false);
} catch(Exception e) {
logger.log(Level.SEVERE, "JavaEEServiceEngine : Error processing request" + e , e);
}
| public void | process()MessageAcceptor uses this method to start processing the MEP.
execute();
| private javax.xml.soap.SOAPMessage | processEJBRequest(javax.xml.soap.SOAPMessage message, com.sun.enterprise.webservice.EjbRuntimeEndpointInfo endpointInfo)
if (message != null) {
Container container = endpointInfo.getContainer();
SOAPMessageContext msgContext = rpcFactory.createSOAPMessageContext();
// Set context class loader to application class loader
container.externalPreInvoke();
msgContext.setMessage(message);
try {
// Do ejb container pre-invocation and pre-handler
// logic
Handler implementor = ((Ejb2RuntimeEndpointInfo) endpointInfo).getHandlerImplementor(msgContext);
// Pass control back to jaxrpc runtime to invoke
// any handlers and call the webservice method itself,
// which will be flow back into the ejb container.
implementor.handle(msgContext);
SOAPMessage reply = msgContext.getMessage();
if (reply.saveRequired()) {
reply.saveChanges();
}
return reply;
} catch(Exception e) {
logger.fine(e.getMessage());
} finally {
// Always call release, even if an error happened
// during getImplementor(), since some of the
// preInvoke steps might have occurred. It's ok
// if implementor is null.
endpointInfo.releaseImplementor();
// Restore context class loader
container.externalPostInvoke();
}
} else {
String errorMsg = "null message POSTed to ejb endpoint " +
endpointInfo.getEndpoint().getEndpointName() +
" at " + endpointInfo.getEndpointAddressUri();
logger.severe(errorMsg);
}
return null;
|
|