You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by he...@apache.org on 2005/06/28 05:01:39 UTC
svn commit: r202118 - in /webservices/axis/trunk/java/modules/core:
src/org/apache/axis/clientapi/ src/org/apache/axis/context/
src/org/apache/axis/receivers/ src/org/apache/axis/transport/
src/org/apache/axis/transport/http/ src/org/apache/axis/transp...
Author: hemapani
Date: Mon Jun 27 20:01:37 2005
New Revision: 202118
URL: http://svn.apache.org/viewcvs?rev=202118&view=rev
Log:
fix a message in messsage context injection test, integrate the thread pool,cleanup for http transport
Modified:
webservices/axis/trunk/java/modules/core/src/org/apache/axis/clientapi/InOutMEPClient.java
webservices/axis/trunk/java/modules/core/src/org/apache/axis/context/ConfigurationContext.java
webservices/axis/trunk/java/modules/core/src/org/apache/axis/receivers/AbstractMessageReceiver.java
webservices/axis/trunk/java/modules/core/src/org/apache/axis/transport/TransportUtils.java
webservices/axis/trunk/java/modules/core/src/org/apache/axis/transport/http/AxisServlet.java
webservices/axis/trunk/java/modules/core/src/org/apache/axis/transport/http/HTTPTransportUtils.java
webservices/axis/trunk/java/modules/core/src/org/apache/axis/transport/http/SimpleHTTPServer.java
webservices/axis/trunk/java/modules/core/src/org/apache/axis/transport/mail/MailWorker.java
webservices/axis/trunk/java/modules/core/src/org/apache/axis/transport/mail/SimpleMailListener.java
webservices/axis/trunk/java/modules/core/src/org/apache/axis/transport/tcp/TCPServer.java
webservices/axis/trunk/java/modules/core/test/org/apache/axis/engine/MessageContextInjectionTest.java
Modified: webservices/axis/trunk/java/modules/core/src/org/apache/axis/clientapi/InOutMEPClient.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/modules/core/src/org/apache/axis/clientapi/InOutMEPClient.java?rev=202118&r1=202117&r2=202118&view=diff
==============================================================================
--- webservices/axis/trunk/java/modules/core/src/org/apache/axis/clientapi/InOutMEPClient.java (original)
+++ webservices/axis/trunk/java/modules/core/src/org/apache/axis/clientapi/InOutMEPClient.java Mon Jun 27 20:01:37 2005
@@ -18,15 +18,8 @@
package org.apache.axis.clientapi;
import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.Reader;
import javax.xml.namespace.QName;
-import javax.xml.stream.FactoryConfigurationError;
-import javax.xml.stream.XMLInputFactory;
-import javax.xml.stream.XMLStreamException;
-import javax.xml.stream.XMLStreamReader;
import org.apache.axis.Constants;
import org.apache.axis.addressing.EndpointReference;
@@ -41,12 +34,9 @@
import org.apache.axis.engine.AxisEngine;
import org.apache.axis.engine.AxisFault;
import org.apache.axis.om.OMException;
-import org.apache.axis.om.impl.llom.builder.StAXBuilder;
-import org.apache.axis.om.impl.llom.OMOutput;
import org.apache.axis.soap.SOAPEnvelope;
-import org.apache.axis.soap.impl.llom.builder.StAXSOAPModelBuilder;
import org.apache.axis.transport.TransportListener;
-import org.apache.axis.transport.http.HTTPTransportReceiver;
+import org.apache.axis.util.threadpool.AxisWorker;
import org.apache.wsdl.WSDLConstants;
/**
@@ -135,8 +125,7 @@
}
}
if (callback.envelope != null) {
- MessageContext resMsgctx =
- new MessageContext(serviceContext.getEngineContext());
+ MessageContext resMsgctx = new MessageContext(serviceContext.getEngineContext());
resMsgctx.setEnvelope(callback.envelope);
return resMsgctx;
} else {
@@ -159,7 +148,6 @@
msgctx.setOperationContext(
OperationContextFactory.createMEPContext(
WSDLConstants.MEP_CONSTANT_IN_OUT,
-
axisop,
serviceContext));
MessageContext response = TwoChannelBasedSender.send(msgctx, listenerTransport);
@@ -193,37 +181,17 @@
axisop.setMessageReciever(callbackReceiver);
callbackReceiver.addCallback(messageID, callback);
msgctx.setReplyTo(
- ListenerManager.replyToEPR(
+ ListenerManager.replyToEPR(
serviceContext.getServiceConfig().getName().getLocalPart()
+ "/"
- + axisop.getName().getLocalPart(),listenerTransport.getName().getLocalPart()));
- msgctx.setOperationContext(
- axisop.findOperationContext(msgctx, serviceContext));
+ + axisop.getName().getLocalPart(),
+ listenerTransport.getName().getLocalPart()));
+ msgctx.setOperationContext(axisop.findOperationContext(msgctx, serviceContext));
msgctx.setServiceContext(serviceContext);
engine.send(msgctx);
} else {
- Thread thread = new Thread(new Runnable() {
- public void run() {
- try {
- msgctx.setOperationContext(
- OperationContextFactory.createMEPContext(
- WSDLConstants.MEP_CONSTANT_IN_OUT,
- axisop,
- serviceContext));
- msgctx.setServiceContext(serviceContext);
- MessageContext response =
- TwoChannelBasedSender.send(msgctx, listenerTransport);
- SOAPEnvelope resenvelope = response.getEnvelope();
- AsyncResult asyncResult = new AsyncResult();
- asyncResult.setResult(resenvelope);
- callback.onComplete(asyncResult);
- callback.setComplete(true);
- } catch (AxisFault e) {
- callback.reportError(e);
- }
- }
- });
- thread.start();
+ serviceContext.getEngineContext().getThreadPool().addWorker(
+ new NonBlockingInvocationWorker(callback,axisop,msgctx));
}
// //TODO start the server
@@ -319,63 +287,71 @@
throw new AxisFault("useSeparateListener = false is only supports by the htpp transport set as the sender and receiver");
}
- this.senderTransport = serviceContext.getEngineContext().getAxisConfiguration().getTransportOut(new QName(senderTransport));
- this.listenerTransport = serviceContext.getEngineContext().getAxisConfiguration().getTransportIn(new QName(listenerTransport));
+ this.senderTransport =
+ serviceContext.getEngineContext().getAxisConfiguration().getTransportOut(
+ new QName(senderTransport));
+ this.listenerTransport =
+ serviceContext.getEngineContext().getAxisConfiguration().getTransportIn(
+ new QName(listenerTransport));
if (useSeparateListener == true) {
- if(!serviceContext.getEngineContext().getAxisConfiguration().isEngaged(new QName(Constants.MODULE_ADDRESSING))){
+ if (!serviceContext
+ .getEngineContext()
+ .getAxisConfiguration()
+ .isEngaged(new QName(Constants.MODULE_ADDRESSING))) {
throw new AxisFault("to do two Transport Channels the Addressing Modules must be engeged");
}
ListenerManager.makeSureStarted(listenerTransport, serviceContext.getEngineContext());
}
}
-// private SOAPEnvelope checkReturnChannel(MessageContext response) throws AxisFault {
-// SOAPEnvelope resenvelope = null;
-// try {
-// //TODO Fix this we support only the HTTP Sync cases, so we hardcode this
-// if (Constants.TRANSPORT_HTTP.equals(listenerTransport)) {
-// HTTPTransportReceiver receiver = new HTTPTransportReceiver();
-// resenvelope = receiver.handleHTTPRequest(response, serviceContext.getEngineContext());
-// } else if (Constants.TRANSPORT_TCP.equals(listenerTransport)) {
-// InputStream inStream = (InputStream) response.getProperty(MessageContext.TRANSPORT_IN);
-// response.setProperty(MessageContext.TRANSPORT_IN,null);
-// Reader in = new InputStreamReader(inStream);
-//
-// if (in != null) {
-// XMLStreamReader xmlreader =
-// XMLInputFactory.newInstance().createXMLStreamReader(in);
-// StAXBuilder builder = new StAXSOAPModelBuilder(xmlreader);
-// resenvelope = (SOAPEnvelope) builder.getDocumentElement();
-// } else {
-// throw new AxisFault(
-// "Sync invocation expect a proeprty "
-// + MessageContext.TRANSPORT_IN
-// + " set ");
-// }
-// }
-// } catch (XMLStreamException e) {
-// throw new AxisFault(e);
-// } catch (FactoryConfigurationError e) {
-// throw new AxisFault(e);
-// }
-// return resenvelope;
-// }
+ // private SOAPEnvelope checkReturnChannel(MessageContext response) throws AxisFault {
+ // SOAPEnvelope resenvelope = null;
+ // try {
+ // //TODO Fix this we support only the HTTP Sync cases, so we hardcode this
+ // if (Constants.TRANSPORT_HTTP.equals(listenerTransport)) {
+ // HTTPTransportReceiver receiver = new HTTPTransportReceiver();
+ // resenvelope = receiver.handleHTTPRequest(response, serviceContext.getEngineContext());
+ // } else if (Constants.TRANSPORT_TCP.equals(listenerTransport)) {
+ // InputStream inStream = (InputStream) response.getProperty(MessageContext.TRANSPORT_IN);
+ // response.setProperty(MessageContext.TRANSPORT_IN,null);
+ // Reader in = new InputStreamReader(inStream);
+ //
+ // if (in != null) {
+ // XMLStreamReader xmlreader =
+ // XMLInputFactory.newInstance().createXMLStreamReader(in);
+ // StAXBuilder builder = new StAXSOAPModelBuilder(xmlreader);
+ // resenvelope = (SOAPEnvelope) builder.getDocumentElement();
+ // } else {
+ // throw new AxisFault(
+ // "Sync invocation expect a proeprty "
+ // + MessageContext.TRANSPORT_IN
+ // + " set ");
+ // }
+ // }
+ // } catch (XMLStreamException e) {
+ // throw new AxisFault(e);
+ // } catch (FactoryConfigurationError e) {
+ // throw new AxisFault(e);
+ // }
+ // return resenvelope;
+ // }
private void checkTransport(MessageContext msgctx) throws AxisFault {
if (senderTransport == null) {
senderTransport = inferTransport(to);
}
if (listenerTransport == null) {
- listenerTransport = serviceContext.getEngineContext().getAxisConfiguration().getTransportIn(
- senderTransport.getName());
+ listenerTransport =
+ serviceContext.getEngineContext().getAxisConfiguration().getTransportIn(
+ senderTransport.getName());
}
if (msgctx.getTransportIn() == null) {
- msgctx.setTransportIn(listenerTransport);
+ msgctx.setTransportIn(listenerTransport);
}
if (msgctx.getTransportOut() == null) {
- msgctx.setTransportOut(senderTransport);
+ msgctx.setTransportOut(senderTransport);
}
}
@@ -389,18 +365,52 @@
public void reportError(Exception e) {
error = e;
}
-// public boolean hasResult() {
-// return envelope != null || error != null;
-// }
+ // public boolean hasResult() {
+ // return envelope != null || error != null;
+ // }
}
public void engageModule(QName moduleName) throws AxisFault {
serviceContext.getEngineContext().getAxisConfiguration().engageModule(moduleName);
}
-
- public void close() throws AxisFault{
+
+ public void close() throws AxisFault {
//senderTransport.getSender().cleanUp();
ListenerManager.stop(listenerTransport.getName().getLocalPart());
- }
+ }
+
+ private class NonBlockingInvocationWorker implements AxisWorker {
+ private Callback callback;
+ private OperationDescription axisop;
+ private MessageContext msgctx;
+
+ public NonBlockingInvocationWorker(
+ Callback callback,
+ OperationDescription axisop,
+ MessageContext msgctx) {
+ this.callback = callback;
+ this.axisop = axisop;
+ this.msgctx = msgctx;
+ }
+
+ public void doWork() {
+ try {
+ msgctx.setOperationContext(
+ OperationContextFactory.createMEPContext(
+ WSDLConstants.MEP_CONSTANT_IN_OUT,
+ axisop,
+ serviceContext));
+ msgctx.setServiceContext(serviceContext);
+ MessageContext response = TwoChannelBasedSender.send(msgctx, listenerTransport);
+ SOAPEnvelope resenvelope = response.getEnvelope();
+ AsyncResult asyncResult = new AsyncResult();
+ asyncResult.setResult(resenvelope);
+ callback.onComplete(asyncResult);
+ callback.setComplete(true);
+ } catch (Exception e) {
+ callback.reportError(e);
+ }
+ }
+ }
}
Modified: webservices/axis/trunk/java/modules/core/src/org/apache/axis/context/ConfigurationContext.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/modules/core/src/org/apache/axis/context/ConfigurationContext.java?rev=202118&r1=202117&r2=202118&view=diff
==============================================================================
--- webservices/axis/trunk/java/modules/core/src/org/apache/axis/context/ConfigurationContext.java (original)
+++ webservices/axis/trunk/java/modules/core/src/org/apache/axis/context/ConfigurationContext.java Mon Jun 27 20:01:37 2005
@@ -27,6 +27,7 @@
import org.apache.axis.engine.AxisConfiguration;
import org.apache.axis.engine.AxisFault;
import org.apache.axis.storage.AxisStorage;
+import org.apache.axis.util.threadpool.ThreadPool;
public class ConfigurationContext extends AbstractContext{
@@ -35,6 +36,7 @@
private Map sessionContextMap;
private Map moduleContextMap;
+ private ThreadPool threadPool;
/**
* Map containing <code>MessageID</code> to
@@ -117,6 +119,16 @@
}else{
throw new AxisFault("Service not found service name = "+serviceName );
}
+ }
+
+ /**
+ * @return
+ */
+ public ThreadPool getThreadPool() {
+ if(threadPool == null){
+ threadPool = new ThreadPool();
+ }
+ return threadPool;
}
}
Modified: webservices/axis/trunk/java/modules/core/src/org/apache/axis/receivers/AbstractMessageReceiver.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/modules/core/src/org/apache/axis/receivers/AbstractMessageReceiver.java?rev=202118&r1=202117&r2=202118&view=diff
==============================================================================
--- webservices/axis/trunk/java/modules/core/src/org/apache/axis/receivers/AbstractMessageReceiver.java (original)
+++ webservices/axis/trunk/java/modules/core/src/org/apache/axis/receivers/AbstractMessageReceiver.java Mon Jun 27 20:01:37 2005
@@ -68,28 +68,29 @@
msgContext.getOperationContext().getServiceContext().getServiceConfig();
Parameter scopeParam = service.getParameter(SCOPE);
- String scope = Constants.MESSAGE_SCOPE;
QName serviceName = service.getName();
- if (Constants.MESSAGE_SCOPE.equals(scope)) {
- return makeNewServiceObject(msgContext);
- } else if (Constants.SESSION_SCOPE.equals(scope)) {
+ if (scopeParam != null && Constants.SESSION_SCOPE.equals(scopeParam.getValue())) {
SessionContext sessionContext = msgContext.getSessionContext();
- Object obj = sessionContext.getProperty(serviceName.getLocalPart());
- if (obj == null) {
- obj = makeNewServiceObject(msgContext);
- sessionContext.setProperty(serviceName.getLocalPart(), obj);
+ synchronized(sessionContext){
+ Object obj = sessionContext.getProperty(serviceName.getLocalPart());
+ if (obj == null) {
+ obj = makeNewServiceObject(msgContext);
+ sessionContext.setProperty(serviceName.getLocalPart(), obj);
+ }
+ return obj;
}
- return obj;
- } else if (Constants.APPLICATION_SCOPE.equals(scope)) {
+ } else if (scopeParam != null && Constants.APPLICATION_SCOPE.equals(scopeParam.getValue())) {
SessionContext globalContext = msgContext.getSessionContext();
- Object obj = globalContext.getProperty(serviceName.getLocalPart());
- if (obj == null) {
- obj = makeNewServiceObject(msgContext);
- globalContext.setProperty(serviceName.getLocalPart(), obj);
+ synchronized(globalContext){
+ Object obj = globalContext.getProperty(serviceName.getLocalPart());
+ if (obj == null) {
+ obj = makeNewServiceObject(msgContext);
+ globalContext.setProperty(serviceName.getLocalPart(), obj);
+ }
+ return obj;
}
- return obj;
} else {
- throw new AxisFault("unknown scope " + scope);
+ return makeNewServiceObject(msgContext);
}
}
}
Modified: webservices/axis/trunk/java/modules/core/src/org/apache/axis/transport/TransportUtils.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/modules/core/src/org/apache/axis/transport/TransportUtils.java?rev=202118&r1=202117&r2=202118&view=diff
==============================================================================
--- webservices/axis/trunk/java/modules/core/src/org/apache/axis/transport/TransportUtils.java (original)
+++ webservices/axis/trunk/java/modules/core/src/org/apache/axis/transport/TransportUtils.java Mon Jun 27 20:01:37 2005
@@ -43,9 +43,11 @@
return createSOAPMessage(msgContext, inStream);
}
+
+
public static SOAPEnvelope createSOAPMessage(
MessageContext msgContext,
- InputStream inStream)
+ InputStream inStream )
throws AxisFault {
try {
//Check for the REST behaviour, if you desire rest beahaviour
@@ -53,9 +55,6 @@
Object doREST =
msgContext.getProperty(Constants.Configuration.DO_REST);
Reader reader = new InputStreamReader(inStream);
-
- char[] chars = new char[1024];
- int read = 100;
XMLStreamReader xmlreader =
XMLInputFactory.newInstance().createXMLStreamReader(reader);
Modified: webservices/axis/trunk/java/modules/core/src/org/apache/axis/transport/http/AxisServlet.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/modules/core/src/org/apache/axis/transport/http/AxisServlet.java?rev=202118&r1=202117&r2=202118&view=diff
==============================================================================
--- webservices/axis/trunk/java/modules/core/src/org/apache/axis/transport/http/AxisServlet.java (original)
+++ webservices/axis/trunk/java/modules/core/src/org/apache/axis/transport/http/AxisServlet.java Mon Jun 27 20:01:37 2005
@@ -83,12 +83,11 @@
HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse)
throws ServletException, IOException {
-
+ httpServletResponse.setContentType("text/xml; charset=utf-8");
try {
-
+
Object sessionContext =
- httpServletRequest.getSession().getAttribute(
- Constants.SESSION_CONTEXT_PROPERTY);
+ httpServletRequest.getSession().getAttribute(Constants.SESSION_CONTEXT_PROPERTY);
if (sessionContext == null) {
sessionContext = new SessionContext(null);
httpServletRequest.getSession().setAttribute(
@@ -104,7 +103,7 @@
String value = httpServletRequest.getParameter(name);
map.put(name, value);
}
-
+
MessageContext msgContext =
new MessageContext(
configContext,
@@ -115,18 +114,19 @@
new QName(Constants.TRANSPORT_HTTP)));
msgContext.setProperty(Constants.Configuration.DO_REST, Constants.VALUE_TRUE);
-
- boolean processed = HTTPTransportUtils.processHTTPGetRequest(msgContext,
- httpServletRequest.getInputStream(),
- httpServletResponse.getOutputStream(),
- httpServletRequest.getContentType(),
- httpServletRequest.getHeader(HTTPConstants.HEADER_SOAP_ACTION),
- httpServletRequest.getRequestURL().toString(),
- configContext,map);
-
-
+ boolean processed =
+ HTTPTransportUtils.processHTTPGetRequest(
+ msgContext,
+ httpServletRequest.getInputStream(),
+ httpServletResponse.getOutputStream(),
+ httpServletRequest.getContentType(),
+ httpServletRequest.getHeader(HTTPConstants.HEADER_SOAP_ACTION),
+ httpServletRequest.getRequestURL().toString(),
+ configContext,
+ map);
+ httpServletResponse.getOutputStream().flush();
if (!processed) {
- lister.handle(httpServletRequest, httpServletResponse);
+ lister.handle(httpServletRequest, httpServletResponse);
}
} catch (OMException e) {
throw new AxisFault(e);
@@ -168,15 +168,16 @@
new QName(Constants.TRANSPORT_HTTP)),
configContext.getAxisConfiguration().getTransportOut(
new QName(Constants.TRANSPORT_HTTP)));
-
- res.setContentType("text/xml; charset=utf-8");
- HTTPTransportUtils.processHTTPPostRequest(msgContext,
- req.getInputStream(),
- res.getOutputStream(),
- req.getContentType(),
- req.getHeader(HTTPConstants.HEADER_SOAP_ACTION),
- req.getRequestURL().toString(),
- configContext);
+
+ res.setContentType("text/xml; charset=utf-8");
+ HTTPTransportUtils.processHTTPPostRequest(
+ msgContext,
+ req.getInputStream(),
+ res.getOutputStream(),
+ req.getContentType(),
+ req.getHeader(HTTPConstants.HEADER_SOAP_ACTION),
+ req.getRequestURL().toString(),
+ configContext);
Object contextWritten = msgContext.getProperty(Constants.RESPONSE_WRITTEN);
if (contextWritten == null || !Constants.VALUE_TRUE.equals(contextWritten)) {
res.setStatus(HttpServletResponse.SC_ACCEPTED);
Modified: webservices/axis/trunk/java/modules/core/src/org/apache/axis/transport/http/HTTPTransportUtils.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/modules/core/src/org/apache/axis/transport/http/HTTPTransportUtils.java?rev=202118&r1=202117&r2=202118&view=diff
==============================================================================
--- webservices/axis/trunk/java/modules/core/src/org/apache/axis/transport/http/HTTPTransportUtils.java (original)
+++ webservices/axis/trunk/java/modules/core/src/org/apache/axis/transport/http/HTTPTransportUtils.java Mon Jun 27 20:01:37 2005
@@ -17,26 +17,41 @@
*/
package org.apache.axis.transport.http;
+import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
+import java.io.InputStreamReader;
import java.io.OutputStream;
+import java.io.Reader;
import java.util.Iterator;
import java.util.Map;
+import java.util.StringTokenizer;
+
+import javax.xml.parsers.FactoryConfigurationError;
+import javax.xml.stream.XMLInputFactory;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamReader;
import org.apache.axis.Constants;
import org.apache.axis.addressing.AddressingConstants;
import org.apache.axis.addressing.EndpointReference;
+import org.apache.axis.attachments.MIMEHelper;
import org.apache.axis.context.ConfigurationContext;
import org.apache.axis.context.MessageContext;
import org.apache.axis.engine.AxisEngine;
import org.apache.axis.engine.AxisFault;
import org.apache.axis.om.OMElement;
+import org.apache.axis.om.OMException;
import org.apache.axis.om.OMNamespace;
import org.apache.axis.om.impl.llom.OMNamespaceImpl;
+import org.apache.axis.om.impl.llom.builder.StAXBuilder;
+import org.apache.axis.om.impl.llom.builder.StAXOMBuilder;
+import org.apache.axis.om.impl.llom.mtom.MTOMStAXSOAPModelBuilder;
import org.apache.axis.soap.SOAPEnvelope;
import org.apache.axis.soap.SOAPFactory;
+import org.apache.axis.soap.impl.llom.SOAPProcessingException;
+import org.apache.axis.soap.impl.llom.builder.StAXSOAPModelBuilder;
import org.apache.axis.soap.impl.llom.soap11.SOAP11Factory;
-import org.apache.axis.transport.TransportUtils;
import org.apache.axis.util.Utils;
public class HTTPTransportUtils {
@@ -51,33 +66,56 @@
ConfigurationContext configurationContext)
throws AxisFault {
- msgContext.setWSAAction(soapAction);
- msgContext.setTo(new EndpointReference(AddressingConstants.WSA_TO, requestURI));
-
- if (Constants.SOAP.MTOM_CONTENT_TYPE.equals(contentType)) {
- if (Constants
- .VALUE_TRUE
- .equals(msgContext.getProperty(Constants.Configuration.ENABLE_MTOM))) {
- msgContext.setProperty(Constants.Configuration.DO_MTOM, Constants.VALUE_TRUE);
- } else {
- throw new AxisFault("MTOTM Not supported");
+ try {
+ msgContext.setWSAAction(soapAction);
+ msgContext.setTo(new EndpointReference(AddressingConstants.WSA_TO, requestURI));
+
+ SOAPEnvelope envelope = null;
+ StAXBuilder builder = null;
+ Reader reader = new InputStreamReader(in);
+ XMLStreamReader xmlreader =
+ XMLInputFactory.newInstance().createXMLStreamReader(reader);
+
+
+ StringTokenizer st = new StringTokenizer(contentType);
+
+ String mimetype = null;
+ if (st.hasMoreTokens()){
+ mimetype = st.nextToken();
}
- } else if (Constants.SOAP.SOAP_12_CONTENT_TYPE.equals(contentType)) {
- //TODO what to do with 1.2 for REST
- } else if (
- contentType != null && contentType.indexOf(Constants.SOAP.SOAP_11_CONTENT_TYPE) > -1) {
- if ((soapAction == null || soapAction.length() == 0)
- && Constants.VALUE_TRUE.equals(
- msgContext.getProperty(Constants.Configuration.ENABLE_REST))) {
- msgContext.setProperty(Constants.Configuration.DO_REST, Constants.VALUE_TRUE);
+
+ if (HTTPConstants.HEADER_ACCEPT_MULTIPART_RELATED.equalsIgnoreCase(mimetype)) {
+ builder = selectBuilderForMIME(msgContext,in,contentType);
+ envelope = (SOAPEnvelope) builder.getDocumentElement();
+ } else if (
+ contentType != null && contentType.indexOf(Constants.SOAP.SOAP_11_CONTENT_TYPE) > -1) {
+ if ((soapAction == null || soapAction.length() == 0)
+ && Constants.VALUE_TRUE.equals(
+ msgContext.getProperty(Constants.Configuration.ENABLE_REST))) {
+ msgContext.setProperty(Constants.Configuration.DO_REST, Constants.VALUE_TRUE);
+ SOAPFactory soapFactory = new SOAP11Factory();
+ builder = new StAXOMBuilder(xmlreader);
+ builder.setOmbuilderFactory(soapFactory);
+ envelope = soapFactory.getDefaultEnvelope();
+ envelope.getBody().addChild(builder.getDocumentElement());
+ }
}
- }
-
- SOAPEnvelope envelope = TransportUtils.createSOAPMessage(msgContext, in);
-
- msgContext.setEnvelope(envelope);
- AxisEngine engine = new AxisEngine(configurationContext);
- engine.receive(msgContext);
+
+ if(envelope == null){
+ builder = new StAXSOAPModelBuilder(xmlreader);
+ envelope = (SOAPEnvelope) builder.getDocumentElement();
+ }
+
+ msgContext.setEnvelope(envelope);
+ AxisEngine engine = new AxisEngine(configurationContext);
+ engine.receive(msgContext);
+ } catch (SOAPProcessingException e) {
+ throw new AxisFault(e);
+ } catch (OMException e) {
+ throw new AxisFault(e);
+ } catch (XMLStreamException e) {
+ throw new AxisFault(e);
+ }
}
public static boolean processHTTPGetRequest(
@@ -88,7 +126,8 @@
String soapAction,
String requestURI,
ConfigurationContext configurationContext,Map requestParameters) throws AxisFault {
-
+ msgContext.setWSAAction(soapAction);
+ msgContext.setTo(new EndpointReference(AddressingConstants.WSA_TO, requestURI));
try {
SOAPEnvelope envelope =
HTTPTransportUtils.createEnvelopeFromGetRequest(
@@ -135,4 +174,31 @@
return null;
}
}
+ public static StAXBuilder selectBuilderForMIME(MessageContext msgContext, InputStream inStream,String contentTypeString) throws OMException, XMLStreamException, FactoryConfigurationError
+ {
+ StAXBuilder builder = null;
+ MIMEHelper mimeHelper = new MIMEHelper(inStream, contentTypeString);
+ XMLStreamReader reader = XMLInputFactory
+ .newInstance()
+ .createXMLStreamReader(
+ new BufferedReader(
+ new InputStreamReader(mimeHelper
+ .getSOAPPartInputStream())));
+ /*
+ * put a reference to Attachments in to the message context
+ */
+ msgContext.setProperty("Attachments", mimeHelper);
+ if (mimeHelper.getAttachmentSpecType().equals(
+ MIMEHelper.MTOM_TYPE)) {
+ /*
+ * Creates the MTOM specific MTOMStAXSOAPModelBuilder
+ */
+ builder = new MTOMStAXSOAPModelBuilder(reader,
+ mimeHelper);
+ } else if (mimeHelper.getAttachmentSpecType().equals(
+ MIMEHelper.SWA_TYPE)) {
+ builder = new StAXSOAPModelBuilder(reader);
+ }
+ return builder;
+ }
}
Modified: webservices/axis/trunk/java/modules/core/src/org/apache/axis/transport/http/SimpleHTTPServer.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/modules/core/src/org/apache/axis/transport/http/SimpleHTTPServer.java?rev=202118&r1=202117&r2=202118&view=diff
==============================================================================
--- webservices/axis/trunk/java/modules/core/src/org/apache/axis/transport/http/SimpleHTTPServer.java (original)
+++ webservices/axis/trunk/java/modules/core/src/org/apache/axis/transport/http/SimpleHTTPServer.java Mon Jun 27 20:01:37 2005
@@ -17,23 +17,16 @@
import java.io.File;
import java.io.IOException;
-import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
-import java.util.Map;
-import javax.xml.namespace.QName;
-
-import org.apache.axis.Constants;
import org.apache.axis.addressing.AddressingConstants;
import org.apache.axis.addressing.EndpointReference;
import org.apache.axis.clientapi.ListenerManager;
import org.apache.axis.context.ConfigurationContext;
import org.apache.axis.context.ConfigurationContextFactory;
-import org.apache.axis.context.MessageContext;
import org.apache.axis.description.Parameter;
import org.apache.axis.description.TransportInDescription;
-import org.apache.axis.description.TransportOutDescription;
import org.apache.axis.engine.AxisFault;
import org.apache.axis.transport.TransportListener;
import org.apache.commons.logging.Log;
@@ -65,11 +58,6 @@
protected ServerSocket serverSocket;
/**
- * Field socket
- */
- protected Socket socket;
-
- /**
* are we stopped?
* latch to true if stop() is called
*/
@@ -126,9 +114,8 @@
public void run() {
try {
while (!stopped) {
- try {
-
// Accept and process requests from the socket
+ Socket socket = null;
try {
socket = serverSocket.accept();
} catch (java.io.InterruptedIOException iie) {
@@ -137,81 +124,8 @@
break;
}
if (socket != null) {
- if (configurationContext == null) {
- throw new AxisFault("Engine Must be null");
- }
-
- InputStream inStream = socket.getInputStream();
-
-
-
- TransportOutDescription transportOut =
- configurationContext.getAxisConfiguration().getTransportOut(
- new QName(Constants.TRANSPORT_HTTP));
- MessageContext msgContext =
- new MessageContext(
- configurationContext,
- configurationContext.getAxisConfiguration().getTransportIn(
- new QName(Constants.TRANSPORT_HTTP)),
- transportOut);
- msgContext.setServerSide(true);
-
- // We do not have any Addressing Headers to put
- // let us put the information about incoming transport
- HTTPTransportReceiver reciver = new HTTPTransportReceiver();
- Map map = reciver.parseTheHeaders(inStream, true);
-
- SimpleHTTPOutputStream out;
- String transferEncoding = (String)map.get(HTTPConstants.HEADER_TRANSFER_ENCODING);
- if(transferEncoding != null
- && HTTPConstants.HEADER_TRANSFER_ENCODING_CHUNKED.equals(transferEncoding)){
- inStream = new ChunkedInputStream(inStream);
- out = new SimpleHTTPOutputStream(socket.getOutputStream(),true);
- }else{
- out = new SimpleHTTPOutputStream(socket.getOutputStream(),false);
- }
-
- //OutputStream out = socket.getOutputStream();
- msgContext.setProperty(MessageContext.TRANSPORT_OUT, out);
-
-
-
- if (HTTPConstants.HEADER_GET.equals(map.get(HTTPConstants.HTTP_REQ_TYPE))) {
- boolean processed = HTTPTransportUtils.processHTTPGetRequest(msgContext,
- inStream,
- out,
- (String) map.get(HTTPConstants.HEADER_CONTENT_TYPE),
- (String) map.get(HTTPConstants.HEADER_SOAP_ACTION),
- (String) map.get(HTTPConstants.REQUEST_URI),
- configurationContext,
- HTTPTransportReceiver.getGetRequestParameters((String) map.get(HTTPConstants.REQUEST_URI)));
-
- if(!processed){
- out.write(HTTPTransportReceiver.getServicesHTML(configurationContext).getBytes());
- out.flush();
- }
- } else {
- HTTPTransportUtils.processHTTPPostRequest(msgContext,
- inStream,
- out,
- (String) map.get(HTTPConstants.HEADER_CONTENT_TYPE),
- (String) map.get(HTTPConstants.HEADER_SOAP_ACTION),
- (String) map.get(HTTPConstants.REQUEST_URI),
- configurationContext);
- }
-
-
- out.finalize();
- }
- } catch (Throwable e) {
- log.error(e);
- e.printStackTrace();
- } finally {
- if (socket != null) {
- this.socket.close();
- this.socket = null;
+ configurationContext.getThreadPool().addWorker(new HTTPWorker(configurationContext,socket));
}
- }
}
} catch (IOException e) {
log.error(e);
Modified: webservices/axis/trunk/java/modules/core/src/org/apache/axis/transport/mail/MailWorker.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/modules/core/src/org/apache/axis/transport/mail/MailWorker.java?rev=202118&r1=202117&r2=202118&view=diff
==============================================================================
--- webservices/axis/trunk/java/modules/core/src/org/apache/axis/transport/mail/MailWorker.java (original)
+++ webservices/axis/trunk/java/modules/core/src/org/apache/axis/transport/mail/MailWorker.java Mon Jun 27 20:01:37 2005
@@ -37,10 +37,11 @@
import org.apache.axis.om.impl.llom.builder.StAXBuilder;
import org.apache.axis.soap.SOAPEnvelope;
import org.apache.axis.soap.impl.llom.builder.StAXSOAPModelBuilder;
+import org.apache.axis.util.threadpool.AxisWorker;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-public class MailWorker implements Runnable {
+public class MailWorker implements AxisWorker {
protected static Log log = LogFactory.getLog(MailWorker.class.getName());
private String contentType = "text/xml";
@@ -68,7 +69,7 @@
/**
* The main workhorse method.
*/
- public void run() {
+ public void doWork() {
// create an Axis server
AxisEngine engine = new AxisEngine(reg);
MessageContext msgContext = null;
Modified: webservices/axis/trunk/java/modules/core/src/org/apache/axis/transport/mail/SimpleMailListener.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/modules/core/src/org/apache/axis/transport/mail/SimpleMailListener.java?rev=202118&r1=202117&r2=202118&view=diff
==============================================================================
--- webservices/axis/trunk/java/modules/core/src/org/apache/axis/transport/mail/SimpleMailListener.java (original)
+++ webservices/axis/trunk/java/modules/core/src/org/apache/axis/transport/mail/SimpleMailListener.java Mon Jun 27 20:01:37 2005
@@ -158,7 +158,7 @@
MimeMessage msg = (MimeMessage) msgs[i];
if (msg != null) {
MailWorker worker = new MailWorker(msg, configurationContext);
- worker.run();
+ configurationContext.getThreadPool().addWorker(worker);
}
msg.setFlag(Flags.Flag.DELETED, true);
}
Modified: webservices/axis/trunk/java/modules/core/src/org/apache/axis/transport/tcp/TCPServer.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/modules/core/src/org/apache/axis/transport/tcp/TCPServer.java?rev=202118&r1=202117&r2=202118&view=diff
==============================================================================
--- webservices/axis/trunk/java/modules/core/src/org/apache/axis/transport/tcp/TCPServer.java (original)
+++ webservices/axis/trunk/java/modules/core/src/org/apache/axis/transport/tcp/TCPServer.java Mon Jun 27 20:01:37 2005
@@ -17,32 +17,18 @@
import java.io.File;
import java.io.IOException;
-import java.io.InputStreamReader;
-import java.io.OutputStream;
-import java.io.Reader;
import java.net.ServerSocket;
import java.net.Socket;
-import javax.xml.namespace.QName;
-import javax.xml.stream.XMLInputFactory;
-import javax.xml.stream.XMLStreamReader;
-
-import org.apache.axis.Constants;
import org.apache.axis.addressing.AddressingConstants;
import org.apache.axis.addressing.EndpointReference;
import org.apache.axis.clientapi.ListenerManager;
import org.apache.axis.context.ConfigurationContext;
import org.apache.axis.context.ConfigurationContextFactory;
-import org.apache.axis.context.MessageContext;
import org.apache.axis.deployment.DeploymentException;
import org.apache.axis.description.Parameter;
import org.apache.axis.description.TransportInDescription;
-import org.apache.axis.description.TransportOutDescription;
-import org.apache.axis.engine.AxisEngine;
import org.apache.axis.engine.AxisFault;
-import org.apache.axis.om.impl.llom.builder.StAXBuilder;
-import org.apache.axis.soap.SOAPEnvelope;
-import org.apache.axis.soap.impl.llom.builder.StAXSOAPModelBuilder;
import org.apache.axis.transport.TransportListener;
import org.apache.axis.transport.http.SimpleHTTPServer;
import org.apache.commons.logging.Log;
@@ -58,7 +44,8 @@
private ConfigurationContext configContext;
protected Log log = LogFactory.getLog(SimpleHTTPServer.class.getName());
- public TCPServer(){}
+ public TCPServer() {
+ }
public TCPServer(int port, String dir) throws AxisFault {
try {
@@ -86,7 +73,6 @@
while (started) {
Socket socket = null;
try {
-
try {
socket = serversocket.accept();
} catch (java.io.InterruptedIOException iie) {
@@ -94,47 +80,12 @@
log.debug(e);
break;
}
-
-
- Reader in = new InputStreamReader(socket.getInputStream());
- TransportOutDescription transportOut =
- configContext.getAxisConfiguration().getTransportOut(
- new QName(Constants.TRANSPORT_TCP));
- MessageContext msgContext =
- new MessageContext(
- configContext,
- configContext.getAxisConfiguration().getTransportIn(
- new QName(Constants.TRANSPORT_TCP)),
- transportOut);
- msgContext.setServerSide(true);
- OutputStream out = socket.getOutputStream();
- msgContext.setProperty(MessageContext.TRANSPORT_OUT, out);
-
- AxisEngine engine = new AxisEngine(configContext);
- try {
- XMLStreamReader xmlreader =
- XMLInputFactory.newInstance().createXMLStreamReader(in);
- StAXBuilder builder = new StAXSOAPModelBuilder(xmlreader);
- msgContext.setEnvelope((SOAPEnvelope) builder.getDocumentElement());
- } catch (Exception e) {
- throw new AxisFault(e.getMessage(), e);
+ if (socket != null) {
+ configContext.getThreadPool().addWorker(new TCPWorker(configContext, socket));
}
- engine.receive(msgContext);
- } catch (Throwable e) {
+ } catch (AxisFault e) {
log.error(e);
e.printStackTrace();
- } finally {
- try {
- if (socket != null) {
- socket.close();
- if (!started) {
- serversocket.close();
- }
- }
-
- } catch (IOException e1) {
- log.error(e1);
- }
}
}
@@ -177,13 +128,13 @@
}
}
- public static void main(String[] args) throws AxisFault, NumberFormatException{
+ public static void main(String[] args) throws AxisFault, NumberFormatException {
if (args.length != 2) {
System.out.println("TCPServer repositoryLocation port");
}
- TCPServer tcpServer = new TCPServer(Integer.parseInt(args[1]),args[0]);
+ TCPServer tcpServer = new TCPServer(Integer.parseInt(args[1]), args[0]);
System.out.println("[Axis2] Using the Repository " + new File(args[1]).getAbsolutePath());
- System.out.println("[Axis2] Starting the TCP Server on port "+ args[0]);
+ System.out.println("[Axis2] Starting the TCP Server on port " + args[0]);
tcpServer.start();
}
Modified: webservices/axis/trunk/java/modules/core/test/org/apache/axis/engine/MessageContextInjectionTest.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/modules/core/test/org/apache/axis/engine/MessageContextInjectionTest.java?rev=202118&r1=202117&r2=202118&view=diff
==============================================================================
--- webservices/axis/trunk/java/modules/core/test/org/apache/axis/engine/MessageContextInjectionTest.java (original)
+++ webservices/axis/trunk/java/modules/core/test/org/apache/axis/engine/MessageContextInjectionTest.java Mon Jun 27 20:01:37 2005
@@ -27,7 +27,6 @@
import org.apache.axis.addressing.EndpointReference;
import org.apache.axis.clientapi.MessageSender;
import org.apache.axis.context.ConfigurationContext;
-import org.apache.axis.context.ConfigurationContextFactory;
import org.apache.axis.context.MessageContext;
import org.apache.axis.description.OperationDescription;
import org.apache.axis.description.ParameterImpl;
@@ -71,9 +70,7 @@
}
protected void setUp() throws Exception {
- ConfigurationContextFactory builder = new ConfigurationContextFactory();
- ConfigurationContext configContext =
- builder.buildConfigurationContext(org.apache.axis.Constants.TESTING_REPOSITORY);
+ ConfigurationContext configContext = new ConfigurationContext(new AxisConfigurationImpl());
LocalTransportReceiver.CONFIG_CONTEXT = configContext;
ServiceDescription service = new ServiceDescription(serviceName);