1 23 package com.sun.enterprise.jbi.serviceengine.bridge; 24 import com.sun.ejb.Container; 25 import com.sun.enterprise.jbi.serviceengine.ServiceEngineException; 26 import com.sun.enterprise.jbi.serviceengine.util.soap.MessageExchangeHelper; 27 import com.sun.enterprise.jbi.serviceengine.comm.MessageProcessor; 28 import com.sun.logging.LogDomains; 29 import com.sun.enterprise.security.jauth.ServerAuthConfig; 30 import com.sun.enterprise.security.jauth.ServerAuthContext; 31 import com.sun.enterprise.security.wss.WebServiceSecurity; 32 import com.sun.enterprise.webservice.Ejb2RuntimeEndpointInfo; 33 import com.sun.enterprise.webservice.EjbRuntimeEndpointInfo; 34 import com.sun.xml.rpc.spi.JaxRpcObjectFactory; 35 import com.sun.xml.rpc.spi.runtime.SOAPMessageContext; 36 import com.sun.xml.rpc.spi.runtime.Handler; 37 import com.sun.xml.rpc.spi.runtime.SOAPConstants; 38 import com.sun.xml.rpc.spi.runtime.StreamingHandler; 39 40 41 import java.util.logging.Level ; 42 import java.util.logging.Logger ; 43 import javax.jbi.messaging.MessageExchange; 44 import javax.xml.namespace.QName ; 45 import javax.xml.soap.SOAPMessage ; 46 47 53 public class JAXRPCMessageProcessor extends MessageProcessor { 54 protected static Logger logger = 55 LogDomains.getLogger(LogDomains.EJB_LOGGER); 56 JaxRpcObjectFactory rpcFactory = JaxRpcObjectFactory.newInstance(); 57 private static final QName FAULT_CODE_CLIENT = 60 new QName (SOAPConstants.URI_ENVELOPE, "Client"); 61 62 65 public void process() { 66 execute(); 67 } 68 69 72 public void doWork() { 73 try { 74 MessageExchange me = getMessageExchange(); 76 String endpoint = me.getEndpoint().getEndpointName(); 77 QName service = me.getEndpoint().getServiceName(); 78 SOAPMessage response = null; 79 MessageExchangeHelper meHelper = new MessageExchangeHelper(); 80 meHelper.setMessageExchange(me); 81 try { 82 debug(Level.FINEST,"serviceengine.process_incoming_request", 83 new Object []{service.getLocalPart(), endpoint}); 84 85 86 EjbRuntimeEndpointInfo runtimeEndpointInfo = 87 (EjbRuntimeEndpointInfo)RuntimeEndpointInfoRegistryImpl.getInstance(). 88 getRuntimeEndpointInfo(service, endpoint); 89 90 response = processEJBRequest( 91 meHelper.denormalizeMessage(true), runtimeEndpointInfo); 92 } catch(Throwable e) { 93 logger.log(Level.SEVERE, "serviceengine.error_incoming_request", e); 94 ServiceEngineException seException = new ServiceEngineException(e); 95 meHelper.handleException(seException); 96 } 97 meHelper.handleResponse(response, false); 98 } catch(Exception e) { 99 logger.log(Level.SEVERE, "JavaEEServiceEngine : Error processing request" + e , e); 100 } 101 } 102 103 private void debug(Level logLevel, String msgID, Object [] params) { 104 logger.log(logLevel, msgID, params); 105 } 106 107 private SOAPMessage processEJBRequest(SOAPMessage message, 108 EjbRuntimeEndpointInfo endpointInfo) { 109 ServerAuthContext sAC = null; 110 SOAPMessageContext msgContext = null; 111 boolean wssSucceded = true; 112 113 if (message != null) { 114 Container container = endpointInfo.getContainer(); 115 msgContext = rpcFactory.createSOAPMessageContext(); 116 container.externalPreInvoke(); 118 msgContext.setMessage(message); 119 120 Handler implementor = null; 121 try { 122 implementor = ((Ejb2RuntimeEndpointInfo) endpointInfo).getHandlerImplementor(msgContext); 125 ServerAuthConfig authConfig = endpointInfo.getServerAuthConfig(); 126 if (authConfig != null) { 127 sAC = authConfig.getAuthContext 128 ((StreamingHandler)implementor,message); 129 if (sAC != null) { 130 wssSucceded = 131 WebServiceSecurity.validateRequest(msgContext,sAC); 132 } 133 } 134 135 if (wssSucceded) { 139 implementor.handle(msgContext); 140 } 141 142 SOAPMessage reply = msgContext.getMessage(); 143 144 if (sAC != null && wssSucceded) { 145 WebServiceSecurity.secureResponse(msgContext,sAC); 146 } 147 148 if (reply.saveRequired()) { 149 reply.saveChanges(); 150 } 151 return reply; 152 153 } catch(Exception e) { 154 logger.fine(e.getMessage()); 155 } finally { 156 157 endpointInfo.releaseImplementor(); 162 container.externalPostInvoke(); 164 } 165 } else { 166 String errorMsg = "null message POSTed to ejb endpoint " + 167 endpointInfo.getEndpoint().getEndpointName() + 168 " at " + endpointInfo.getEndpointAddressUri(); 169 logger.fine(errorMsg); 170 msgContext.writeSimpleErrorResponse 171 (FAULT_CODE_CLIENT, errorMsg); 172 } 173 174 return null; 175 } 176 } 177 178 | Popular Tags |