Return-Path: Delivered-To: apmail-geronimo-scm-archive@www.apache.org Received: (qmail 30189 invoked from network); 25 Jan 2007 00:04:25 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 25 Jan 2007 00:04:25 -0000 Received: (qmail 32310 invoked by uid 500); 25 Jan 2007 00:04:31 -0000 Delivered-To: apmail-geronimo-scm-archive@geronimo.apache.org Received: (qmail 32277 invoked by uid 500); 25 Jan 2007 00:04:31 -0000 Mailing-List: contact scm-help@geronimo.apache.org; run by ezmlm Precedence: bulk list-help: list-unsubscribe: List-Post: Reply-To: dev@geronimo.apache.org List-Id: Delivered-To: mailing list scm@geronimo.apache.org Received: (qmail 32266 invoked by uid 99); 25 Jan 2007 00:04:31 -0000 Received: from herse.apache.org (HELO herse.apache.org) (140.211.11.133) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 24 Jan 2007 16:04:31 -0800 X-ASF-Spam-Status: No, hits=-9.4 required=10.0 tests=ALL_TRUSTED,NO_REAL_NAME X-Spam-Check-By: apache.org Received: from [140.211.11.3] (HELO eris.apache.org) (140.211.11.3) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 24 Jan 2007 16:04:24 -0800 Received: by eris.apache.org (Postfix, from userid 65534) id C21361A981A; Wed, 24 Jan 2007 16:04:03 -0800 (PST) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r499623 - in /geronimo/server/trunk: configs/cxf/ modules/geronimo-axis/src/main/java/org/apache/geronimo/axis/server/ modules/geronimo-axis2/src/main/java/org/apache/geronimo/axis2/ modules/geronimo-cxf-builder/src/main/java/org/apache/ger... Date: Thu, 25 Jan 2007 00:04:03 -0000 To: scm@geronimo.apache.org From: djencks@apache.org X-Mailer: svnmailer-1.1.0 Message-Id: <20070125000403.C21361A981A@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: djencks Date: Wed Jan 24 16:04:01 2007 New Revision: 499623 URL: http://svn.apache.org/viewvc?view=rev&rev=499623 Log: GERONIMO-2777 expose mandatory jaxws MessageContext properties Modified: geronimo/server/trunk/configs/cxf/pom.xml geronimo/server/trunk/modules/geronimo-axis/src/main/java/org/apache/geronimo/axis/server/AxisWebServiceContainer.java geronimo/server/trunk/modules/geronimo-axis2/src/main/java/org/apache/geronimo/axis2/Axis2WebServiceContainer.java geronimo/server/trunk/modules/geronimo-cxf-builder/src/main/java/org/apache/geronimo/cxf/builder/CXFBuilder.java geronimo/server/trunk/modules/geronimo-cxf/pom.xml geronimo/server/trunk/modules/geronimo-cxf/src/main/java/org/apache/geronimo/cxf/CXFWebServiceContainer.java geronimo/server/trunk/modules/geronimo-cxf/src/main/java/org/apache/geronimo/cxf/CXFWebServiceContainerFactoryGBean.java geronimo/server/trunk/modules/geronimo-cxf/src/main/java/org/apache/geronimo/cxf/GeronimoDestination.java geronimo/server/trunk/modules/geronimo-jetty6/pom.xml geronimo/server/trunk/modules/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty6/JettyEJBWebServiceContext.java geronimo/server/trunk/modules/geronimo-jetty6/src/test/java/org/apache/geronimo/jetty6/app/MockWebServiceContainer.java geronimo/server/trunk/modules/geronimo-tomcat6/src/main/java/org/apache/geronimo/tomcat/TomcatEJBWebServiceContext.java geronimo/server/trunk/modules/geronimo-tomcat6/src/test/java/org/apache/geronimo/tomcat/app/MockWebServiceContainer.java geronimo/server/trunk/modules/geronimo-webservices/src/main/java/org/apache/geronimo/webservices/WebServiceContainer.java geronimo/server/trunk/modules/geronimo-webservices/src/main/java/org/apache/geronimo/webservices/WebServiceContainerInvoker.java Modified: geronimo/server/trunk/configs/cxf/pom.xml URL: http://svn.apache.org/viewvc/geronimo/server/trunk/configs/cxf/pom.xml?view=diff&rev=499623&r1=499622&r2=499623 ============================================================================== --- geronimo/server/trunk/configs/cxf/pom.xml (original) +++ geronimo/server/trunk/configs/cxf/pom.xml Wed Jan 24 16:04:01 2007 @@ -49,6 +49,13 @@ ${version} + + org.apache.geronimo.configs + transaction-jta11 + ${version} + car + + org.apache.geronimo.modules geronimo-cxf Modified: geronimo/server/trunk/modules/geronimo-axis/src/main/java/org/apache/geronimo/axis/server/AxisWebServiceContainer.java URL: http://svn.apache.org/viewvc/geronimo/server/trunk/modules/geronimo-axis/src/main/java/org/apache/geronimo/axis/server/AxisWebServiceContainer.java?view=diff&rev=499623&r1=499622&r2=499623 ============================================================================== --- geronimo/server/trunk/modules/geronimo-axis/src/main/java/org/apache/geronimo/axis/server/AxisWebServiceContainer.java (original) +++ geronimo/server/trunk/modules/geronimo-axis/src/main/java/org/apache/geronimo/axis/server/AxisWebServiceContainer.java Wed Jan 24 16:04:01 2007 @@ -262,6 +262,9 @@ response.getOutputStream().flush(); } + public void destroy() { + } + public URI getLocation() { return location; } Modified: geronimo/server/trunk/modules/geronimo-axis2/src/main/java/org/apache/geronimo/axis2/Axis2WebServiceContainer.java URL: http://svn.apache.org/viewvc/geronimo/server/trunk/modules/geronimo-axis2/src/main/java/org/apache/geronimo/axis2/Axis2WebServiceContainer.java?view=diff&rev=499623&r1=499622&r2=499623 ============================================================================== --- geronimo/server/trunk/modules/geronimo-axis2/src/main/java/org/apache/geronimo/axis2/Axis2WebServiceContainer.java (original) +++ geronimo/server/trunk/modules/geronimo-axis2/src/main/java/org/apache/geronimo/axis2/Axis2WebServiceContainer.java Wed Jan 24 16:04:01 2007 @@ -343,6 +343,9 @@ } } + public void destroy() { + } + public class Axis2TransportInfo implements OutTransportInfo { private Response response; Modified: geronimo/server/trunk/modules/geronimo-cxf-builder/src/main/java/org/apache/geronimo/cxf/builder/CXFBuilder.java URL: http://svn.apache.org/viewvc/geronimo/server/trunk/modules/geronimo-cxf-builder/src/main/java/org/apache/geronimo/cxf/builder/CXFBuilder.java?view=diff&rev=499623&r1=499622&r2=499623 ============================================================================== --- geronimo/server/trunk/modules/geronimo-cxf-builder/src/main/java/org/apache/geronimo/cxf/builder/CXFBuilder.java (original) +++ geronimo/server/trunk/modules/geronimo-cxf-builder/src/main/java/org/apache/geronimo/cxf/builder/CXFBuilder.java Wed Jan 24 16:04:01 2007 @@ -49,6 +49,7 @@ import org.apache.geronimo.j2ee.deployment.WebServiceBuilder; import org.apache.geronimo.j2ee.deployment.WebModule; import org.apache.geronimo.j2ee.deployment.Module; +import org.apache.geronimo.j2ee.deployment.EARContext; import org.apache.geronimo.j2ee.j2eeobjectnames.NameFactory; import org.apache.geronimo.cxf.PortInfo; import org.apache.geronimo.cxf.CXFWebServiceContainerFactoryGBean; @@ -186,6 +187,12 @@ targetGBean.setReferencePattern("WebServiceContainerFactory", containerFactoryName); targetGBean.setAttribute("pojoClassName", seiClassName); + + if (context instanceof EARContext) { + containerFactoryData.setReferencePattern("TransactionManager", + ((EARContext)context).getTransactionManagerName()); + } + return true; } Modified: geronimo/server/trunk/modules/geronimo-cxf/pom.xml URL: http://svn.apache.org/viewvc/geronimo/server/trunk/modules/geronimo-cxf/pom.xml?view=diff&rev=499623&r1=499622&r2=499623 ============================================================================== --- geronimo/server/trunk/modules/geronimo-cxf/pom.xml (original) +++ geronimo/server/trunk/modules/geronimo-cxf/pom.xml Wed Jan 24 16:04:01 2007 @@ -47,6 +47,12 @@ + org.apache.geronimo.modules + geronimo-transaction + ${version} + + + org.apache.cxf cxf-rt-frontend-jaxws Modified: geronimo/server/trunk/modules/geronimo-cxf/src/main/java/org/apache/geronimo/cxf/CXFWebServiceContainer.java URL: http://svn.apache.org/viewvc/geronimo/server/trunk/modules/geronimo-cxf/src/main/java/org/apache/geronimo/cxf/CXFWebServiceContainer.java?view=diff&rev=499623&r1=499622&r2=499623 ============================================================================== --- geronimo/server/trunk/modules/geronimo-cxf/src/main/java/org/apache/geronimo/cxf/CXFWebServiceContainer.java (original) +++ geronimo/server/trunk/modules/geronimo-cxf/src/main/java/org/apache/geronimo/cxf/CXFWebServiceContainer.java Wed Jan 24 16:04:01 2007 @@ -99,6 +99,9 @@ wsdlWriter.writeWSDL(def, response.getOutputStream()); } + public void destroy() { + } + private EndpointImpl publishEndpoint(Object target) { assert target != null : "null target received"; Modified: geronimo/server/trunk/modules/geronimo-cxf/src/main/java/org/apache/geronimo/cxf/CXFWebServiceContainerFactoryGBean.java URL: http://svn.apache.org/viewvc/geronimo/server/trunk/modules/geronimo-cxf/src/main/java/org/apache/geronimo/cxf/CXFWebServiceContainerFactoryGBean.java?view=diff&rev=499623&r1=499622&r2=499623 ============================================================================== --- geronimo/server/trunk/modules/geronimo-cxf/src/main/java/org/apache/geronimo/cxf/CXFWebServiceContainerFactoryGBean.java (original) +++ geronimo/server/trunk/modules/geronimo-cxf/src/main/java/org/apache/geronimo/cxf/CXFWebServiceContainerFactoryGBean.java Wed Jan 24 16:04:01 2007 @@ -20,8 +20,10 @@ import java.util.Map; import java.util.logging.Logger; import java.util.logging.Level; + import javax.naming.Context; import javax.naming.NamingException; +import javax.transaction.TransactionManager; import org.apache.cxf.Bus; import org.apache.cxf.bus.cxf.CXFBusFactory; @@ -30,6 +32,7 @@ import org.apache.geronimo.j2ee.j2eeobjectnames.NameFactory; import org.apache.geronimo.kernel.Kernel; import org.apache.geronimo.naming.enc.EnterpriseNamingContext; +import org.apache.geronimo.transaction.GeronimoUserTransaction; import org.apache.geronimo.webservices.WebServiceContainer; import org.apache.geronimo.webservices.WebServiceContainerFactory; @@ -38,25 +41,29 @@ */ public class CXFWebServiceContainerFactoryGBean implements WebServiceContainerFactory { - private static final Logger LOG = - Logger.getLogger(CXFWebServiceContainerFactoryGBean.class.getName()); + private static final Logger LOG = + Logger.getLogger(CXFWebServiceContainerFactoryGBean.class.getName()); private final PortInfo portInfo; private final Bus bus; private final Object endpointInstance; private Context context; - - public CXFWebServiceContainerFactoryGBean(PortInfo portInfo, - String endpointClassName, - ClassLoader classLoader, - Map componentContext, - Kernel kernel) - throws ClassNotFoundException, IllegalAccessException, InstantiationException { - - // TODO: get access to the transaction manager + + public CXFWebServiceContainerFactoryGBean(PortInfo portInfo, + String endpointClassName, + ClassLoader classLoader, + Map componentContext, + Kernel kernel, + TransactionManager transactionManager) + throws ClassNotFoundException, IllegalAccessException, InstantiationException { + + GeronimoUserTransaction userTransaction = new GeronimoUserTransaction(transactionManager); if (componentContext != null) { try { - this.context = EnterpriseNamingContext.createEnterpriseNamingContext(componentContext, null, kernel, classLoader); + this.context = EnterpriseNamingContext.createEnterpriseNamingContext(componentContext, + userTransaction, + kernel, + classLoader); } catch (NamingException e) { LOG.log(Level.WARNING, "Failed to create naming context", e); } @@ -81,9 +88,10 @@ infoBuilder.addAttribute("classLoader", ClassLoader.class, false); infoBuilder.addAttribute("componentContext", Map.class, true, true); infoBuilder.addAttribute("kernel", Kernel.class, false); + infoBuilder.addReference("TransactionManager", TransactionManager.class, NameFactory.TRANSACTION_MANAGER); - infoBuilder.setConstructor(new String[] {"portInfo", "endpointClassName", "classLoader", - "componentContext", "kernel"}); + infoBuilder.setConstructor(new String[]{"portInfo", "endpointClassName", "classLoader", + "componentContext", "kernel", "TransactionManager"}); GBEAN_INFO = infoBuilder.getBeanInfo(); } Modified: geronimo/server/trunk/modules/geronimo-cxf/src/main/java/org/apache/geronimo/cxf/GeronimoDestination.java URL: http://svn.apache.org/viewvc/geronimo/server/trunk/modules/geronimo-cxf/src/main/java/org/apache/geronimo/cxf/GeronimoDestination.java?view=diff&rev=499623&r1=499622&r2=499623 ============================================================================== --- geronimo/server/trunk/modules/geronimo-cxf/src/main/java/org/apache/geronimo/cxf/GeronimoDestination.java (original) +++ geronimo/server/trunk/modules/geronimo-cxf/src/main/java/org/apache/geronimo/cxf/GeronimoDestination.java Wed Jan 24 16:04:01 2007 @@ -19,11 +19,19 @@ import java.io.IOException; import java.io.OutputStream; import java.io.Serializable; -import java.lang.reflect.Field; +import java.io.InputStream; +import java.net.HttpURLConnection; +import java.util.Iterator; +import java.util.ArrayList; import java.util.LinkedList; import java.util.List; import java.util.Map; +import java.util.Enumeration; import java.util.StringTokenizer; +import javax.servlet.ServletContext; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.xml.ws.handler.MessageContext; import org.apache.cxf.Bus; import org.apache.cxf.message.Exchange; @@ -37,6 +45,7 @@ import org.apache.cxf.transport.http.AbstractHTTPDestination; import org.apache.cxf.ws.addressing.EndpointReferenceType; import org.apache.cxf.wsdl.EndpointReferenceUtils; +import org.apache.geronimo.webservices.WebServiceContainer; import org.apache.geronimo.webservices.WebServiceContainer.Request; import org.apache.geronimo.webservices.WebServiceContainer.Response; @@ -45,7 +54,9 @@ private MessageObserver messageObserver; - public GeronimoDestination(Bus bus, ConduitInitiator conduitInitiator, EndpointInfo endpointInfo) throws IOException { + public GeronimoDestination(Bus bus, + ConduitInitiator conduitInitiator, + EndpointInfo endpointInfo) throws IOException { super(bus, conduitInitiator, endpointInfo); } @@ -55,75 +66,92 @@ public void invoke(Request request, Response response) throws Exception { MessageImpl message = new MessageImpl(); - message.setContent(java.io.InputStream.class, request.getInputStream()); + message.setContent(InputStream.class, request.getInputStream()); message.setDestination(this); message.put(Request.class, request); message.put(Response.class, response); + HttpServletRequest servletRequest = + (HttpServletRequest)request.getAttribute(WebServiceContainer.SERVLET_REQUEST); + message.put(MessageContext.SERVLET_REQUEST, servletRequest); + + HttpServletResponse servletResponse = + (HttpServletResponse)request.getAttribute(WebServiceContainer.SERVLET_RESPONSE); + message.put(MessageContext.SERVLET_RESPONSE, servletResponse); + + ServletContext servletContext = + (ServletContext)request.getAttribute(WebServiceContainer.SERVLET_CONTEXT); + message.put(MessageContext.SERVLET_CONTEXT, servletContext); + + // this calls copyRequestHeaders() + setHeaders(message); + + message.put(Message.HTTP_REQUEST_METHOD, servletRequest.getMethod()); + message.put(Message.PATH_INFO, servletRequest.getPathInfo()); + message.put(Message.QUERY_STRING, servletRequest.getQueryString()); + message.put(Message.CONTENT_TYPE, servletRequest.getContentType()); + message.put(Message.ENCODING, servletRequest.getCharacterEncoding()); + messageObserver.onMessage(message); } - public Conduit getBackChannel(Message inMessage, Message partialResponse, EndpointReferenceType address) throws IOException { - Response response = inMessage.get(Response.class); - Conduit backChannel; - Exchange ex = inMessage.getExchange(); - EndpointReferenceType target = address != null - ? address - : ex.get(EndpointReferenceType.class); - if (target == null) { - backChannel = new BackChannelConduit(response); - } else { - throw new IllegalArgumentException("RM not yet implemented"); - } - return backChannel; - } - - public void shutdown() { - } - - @Override protected void copyRequestHeaders(Message message, Map> headers) { - Request req = message.get(Request.class); - - // no map of headers so just find all static field constants that begin with HEADER_, get - // its value and get the corresponding header. - for (Field field : Request.class.getFields()) { - if (field.getName().startsWith("HEADER_")) { - try { - assert field.getType().equals(String.class) : "unexpected field type"; - String headerName = (String) field.get(null); - String headerValue = req.getHeader(headerName); - if (headerValue != null) { - List values = headers.get(headerName); - if (values == null) { - values = new LinkedList(); - headers.put(headerName, values); - } - values.addAll(splitMultipleHeaderValues(headerValue)); - } - } catch (IllegalAccessException ex) { - // ignore + HttpServletRequest servletRequest = (HttpServletRequest)message.get(MessageContext.SERVLET_REQUEST); + if (servletRequest != null) { + Enumeration names = servletRequest.getHeaderNames(); + while(names.hasMoreElements()) { + String name = (String)names.nextElement(); + + List headerValues = headers.get(name); + if (headerValues == null) { + headerValues = new ArrayList(); + headers.put(name, headerValues); + } + + Enumeration values = servletRequest.getHeaders(name); + while(values.hasMoreElements()) { + String value = (String)values.nextElement(); + headerValues.add(value); } } } } - private List splitMultipleHeaderValues(String value) { - - List allValues = new LinkedList(); - if (value.contains(",")) { - StringTokenizer st = new StringTokenizer(value, ","); - while (st.hasMoreTokens()) { - allValues.add(st.nextToken().trim()); - } - + public Conduit getBackChannel(Message inMessage, + Message partialResponse, + EndpointReferenceType address) throws IOException { + Conduit backChannel = null; + if (address == null) { + backChannel = new BackChannelConduit(address, inMessage); } else { - allValues.add(value); + if (partialResponse != null) { + // setup the outbound message to for 202 Accepted + partialResponse.put(Message.RESPONSE_CODE, + HttpURLConnection.HTTP_ACCEPTED); + backChannel = new BackChannelConduit(address, inMessage); + } else { + backChannel = conduitInitiator.getConduit(endpointInfo, address); + // ensure decoupled back channel input stream is closed + backChannel.setMessageObserver(new MessageObserver() { + public void onMessage(Message m) { + if (m.getContentFormats().contains(InputStream.class)) { + InputStream is = m.getContent(InputStream.class); + try { + is.close(); + } catch (Exception e) { + // ignore + } + } + } + }); + } } - return allValues; + return backChannel; } + public void shutdown() { + } public void setMessageObserver(MessageObserver messageObserver) { this.messageObserver = messageObserver; @@ -131,15 +159,12 @@ protected class BackChannelConduit implements Conduit { - //TODO this will soon be publically available from somewhere in CXF - private static final String ANONYMOUS_ADDRESS = - "http://www.w3.org/2005/08/addressing/anonymous"; - protected Response response; + protected Message request; protected EndpointReferenceType target; - BackChannelConduit(Response resp) { - response = resp; - target = EndpointReferenceUtils.getEndpointReference(ANONYMOUS_ADDRESS); + BackChannelConduit(EndpointReferenceType target, Message request) { + this.target = target; + this.request = request; } public void close(Message msg) throws IOException { @@ -162,12 +187,46 @@ * @param message the message to be sent. */ public void send(Message message) throws IOException { - message.put(Response.class, response); + Response response = (Response)request.get(Response.class); + + // 1. handle response code + Integer i = (Integer)message.get(Message.RESPONSE_CODE); + if (i != null) { + response.setStatusCode(i.intValue()); + } + + // 2. handle response headers + updateResponseHeaders(message); + + Map> protocolHeaders = + (Map>)message.get(Message.PROTOCOL_HEADERS); + + // set headers of the HTTP response object + Iterator headers = protocolHeaders.entrySet().iterator(); + while(headers.hasNext()) { + Map.Entry entry = (Map.Entry)headers.next(); + String headerName = (String)entry.getKey(); + String headerValue = getHeaderValue((List)entry.getValue()); + response.setHeader(headerName, headerValue); + } + //TODO gregw says this should work: current cxf-jetty code wraps output stream. //if this doesn't work, we'd see an error from jetty saying you cant write headers to the output stream. message.setContent(OutputStream.class, response.getOutputStream()); } + private String getHeaderValue(List values) { + Iterator iter = values.iterator(); + StringBuffer buf = new StringBuffer(); + while(iter.hasNext()) { + buf.append(iter.next()); + if (iter.hasNext()) { + buf.append(", "); + } + } + return buf.toString(); + } + /** * @return the reference associated with the target Destination */ Modified: geronimo/server/trunk/modules/geronimo-jetty6/pom.xml URL: http://svn.apache.org/viewvc/geronimo/server/trunk/modules/geronimo-jetty6/pom.xml?view=diff&rev=499623&r1=499622&r2=499623 ============================================================================== --- geronimo/server/trunk/modules/geronimo-jetty6/pom.xml (original) +++ geronimo/server/trunk/modules/geronimo-jetty6/pom.xml Wed Jan 24 16:04:01 2007 @@ -73,7 +73,12 @@ org.mortbay.jetty jetty - + + + + + + org.apache.tomcat jasper Modified: geronimo/server/trunk/modules/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty6/JettyEJBWebServiceContext.java URL: http://svn.apache.org/viewvc/geronimo/server/trunk/modules/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty6/JettyEJBWebServiceContext.java?view=diff&rev=499623&r1=499622&r2=499623 ============================================================================== --- geronimo/server/trunk/modules/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty6/JettyEJBWebServiceContext.java (original) +++ geronimo/server/trunk/modules/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty6/JettyEJBWebServiceContext.java Wed Jan 24 16:04:01 2007 @@ -137,6 +137,11 @@ RequestAdapter request = new RequestAdapter(jettyRequest); ResponseAdapter response = new ResponseAdapter(jettyResponse); + request.setAttribute(WebServiceContainer.SERVLET_REQUEST, req); + request.setAttribute(WebServiceContainer.SERVLET_RESPONSE, res); + // TODO: add support for context + request.setAttribute(WebServiceContainer.SERVLET_CONTEXT, null); + if (req.getParameter("wsdl") != null) { try { webServiceContainer.getWsdl(request, response); @@ -325,5 +330,5 @@ response.setStatus(response.getStatus(), responseString); } } - + } Modified: geronimo/server/trunk/modules/geronimo-jetty6/src/test/java/org/apache/geronimo/jetty6/app/MockWebServiceContainer.java URL: http://svn.apache.org/viewvc/geronimo/server/trunk/modules/geronimo-jetty6/src/test/java/org/apache/geronimo/jetty6/app/MockWebServiceContainer.java?view=diff&rev=499623&r1=499622&r2=499623 ============================================================================== --- geronimo/server/trunk/modules/geronimo-jetty6/src/test/java/org/apache/geronimo/jetty6/app/MockWebServiceContainer.java (original) +++ geronimo/server/trunk/modules/geronimo-jetty6/src/test/java/org/apache/geronimo/jetty6/app/MockWebServiceContainer.java Wed Jan 24 16:04:01 2007 @@ -30,4 +30,7 @@ } + public void destroy() { + } + } Modified: geronimo/server/trunk/modules/geronimo-tomcat6/src/main/java/org/apache/geronimo/tomcat/TomcatEJBWebServiceContext.java URL: http://svn.apache.org/viewvc/geronimo/server/trunk/modules/geronimo-tomcat6/src/main/java/org/apache/geronimo/tomcat/TomcatEJBWebServiceContext.java?view=diff&rev=499623&r1=499622&r2=499623 ============================================================================== --- geronimo/server/trunk/modules/geronimo-tomcat6/src/main/java/org/apache/geronimo/tomcat/TomcatEJBWebServiceContext.java (original) +++ geronimo/server/trunk/modules/geronimo-tomcat6/src/main/java/org/apache/geronimo/tomcat/TomcatEJBWebServiceContext.java Wed Jan 24 16:04:01 2007 @@ -24,7 +24,10 @@ import java.util.HashMap; import java.util.Map; +import javax.servlet.ServletContext; import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import org.apache.catalina.authenticator.BasicAuthenticator; import org.apache.catalina.authenticator.DigestAuthenticator; @@ -130,6 +133,12 @@ req.setContentType("text/xml"); RequestAdapter request = new RequestAdapter(req); ResponseAdapter response = new ResponseAdapter(res); + + request.setAttribute(WebServiceContainer.SERVLET_REQUEST, (HttpServletRequest)req); + request.setAttribute(WebServiceContainer.SERVLET_RESPONSE, (HttpServletResponse)res); + // TODO: add support for context + request.setAttribute(WebServiceContainer.SERVLET_CONTEXT, null); + req.finishRequest(); if (req.getParameter("wsdl") != null) { try { Modified: geronimo/server/trunk/modules/geronimo-tomcat6/src/test/java/org/apache/geronimo/tomcat/app/MockWebServiceContainer.java URL: http://svn.apache.org/viewvc/geronimo/server/trunk/modules/geronimo-tomcat6/src/test/java/org/apache/geronimo/tomcat/app/MockWebServiceContainer.java?view=diff&rev=499623&r1=499622&r2=499623 ============================================================================== --- geronimo/server/trunk/modules/geronimo-tomcat6/src/test/java/org/apache/geronimo/tomcat/app/MockWebServiceContainer.java (original) +++ geronimo/server/trunk/modules/geronimo-tomcat6/src/test/java/org/apache/geronimo/tomcat/app/MockWebServiceContainer.java Wed Jan 24 16:04:01 2007 @@ -30,4 +30,7 @@ } + public void destroy() { + } + } Modified: geronimo/server/trunk/modules/geronimo-webservices/src/main/java/org/apache/geronimo/webservices/WebServiceContainer.java URL: http://svn.apache.org/viewvc/geronimo/server/trunk/modules/geronimo-webservices/src/main/java/org/apache/geronimo/webservices/WebServiceContainer.java?view=diff&rev=499623&r1=499622&r2=499623 ============================================================================== --- geronimo/server/trunk/modules/geronimo-webservices/src/main/java/org/apache/geronimo/webservices/WebServiceContainer.java (original) +++ geronimo/server/trunk/modules/geronimo-webservices/src/main/java/org/apache/geronimo/webservices/WebServiceContainer.java Wed Jan 24 16:04:01 2007 @@ -43,6 +43,24 @@ public static final String MESSAGE_CONTEXT = WebServiceContainer.class.getName()+"@MessageContext"; /** + * Used for JAX-WS MessageContext. MessageContext must expose HttpServletRequest. + */ + public static final String SERVLET_REQUEST = + WebServiceContainer.class.getName()+"@ServletRequest"; + + /** + * Used for JAX-WS MessageContext. MessageContext must expose HttpServletResponse. + */ + public static final String SERVLET_RESPONSE = + WebServiceContainer.class.getName()+"@ServletResponse"; + + /** + * Used for JAX-WS MessageContext. MessageContext must expose ServletContext. + */ + public static final String SERVLET_CONTEXT = + WebServiceContainer.class.getName()+"@ServletContext"; + + /** * Token inserted into wsdl where location should be replaced with the real location */ public String LOCATION_REPLACEMENT_TOKEN = "LOCATIONREPLACEMENTTOKEN"; @@ -50,6 +68,8 @@ void invoke(Request request, Response response) throws Exception; void getWsdl(Request req, Response res) throws Exception; + + void destroy(); public interface Request { /** the HTTP OPTIONS type */ Modified: geronimo/server/trunk/modules/geronimo-webservices/src/main/java/org/apache/geronimo/webservices/WebServiceContainerInvoker.java URL: http://svn.apache.org/viewvc/geronimo/server/trunk/modules/geronimo-webservices/src/main/java/org/apache/geronimo/webservices/WebServiceContainerInvoker.java?view=diff&rev=499623&r1=499622&r2=499623 ============================================================================== --- geronimo/server/trunk/modules/geronimo-webservices/src/main/java/org/apache/geronimo/webservices/WebServiceContainerInvoker.java (original) +++ geronimo/server/trunk/modules/geronimo-webservices/src/main/java/org/apache/geronimo/webservices/WebServiceContainerInvoker.java Wed Jan 24 16:04:01 2007 @@ -40,19 +40,21 @@ private final Object pojo; private WebServiceContainer service; + private ServletConfig config; public WebServiceContainerInvoker(Object pojo) { this.pojo = pojo; } public void init(ServletConfig config) throws ServletException { + this.config = config; ServletContext context = config.getServletContext(); String webServiceContainerID = config.getInitParameter(WEBSERVICE_CONTAINER); service = (WebServiceContainer) context.getAttribute(webServiceContainerID); } public ServletConfig getServletConfig() { - return null; + return config; } public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException { @@ -63,6 +65,10 @@ // This is the guy the WebServiceContainer should invoke req.setAttribute(WebServiceContainer.POJO_INSTANCE, pojo); + req.setAttribute(WebServiceContainer.SERVLET_REQUEST, (HttpServletRequest) req); + req.setAttribute(WebServiceContainer.SERVLET_RESPONSE, (HttpServletResponse) res); + req.setAttribute(WebServiceContainer.SERVLET_CONTEXT, config.getServletContext()); + if (req.getParameter("wsdl") != null || req.getParameter("WSDL") != null) { try { service.getWsdl(request, response); @@ -91,6 +97,7 @@ } public void destroy() { + service.destroy(); } private static class RequestAdapter implements WebServiceContainer.Request { @@ -141,7 +148,6 @@ return request.getParameterMap(); } - private static final Map methods = new HashMap(); static { @@ -175,7 +181,7 @@ public ResponseAdapter(HttpServletResponse response) { this.response = response; } - + public void setHeader(String name, String value) { response.setHeader(name, value); }