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 sc...@apache.org on 2007/09/05 22:22:01 UTC
svn commit: r573047 - in
/webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws:
core/controller/AxisInvocationController.java message/Protocol.java
Author: scheu
Date: Wed Sep 5 13:21:59 2007
New Revision: 573047
URL: http://svn.apache.org/viewvc?rev=573047&view=rev
Log:
AXIS2-3168
Contributor: Nick Gallardo
Performance fix plus some minor changes to AxisInvocationController.
Modified:
webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/core/controller/AxisInvocationController.java
webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/message/Protocol.java
Modified: webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/core/controller/AxisInvocationController.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/core/controller/AxisInvocationController.java?rev=573047&r1=573046&r2=573047&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/core/controller/AxisInvocationController.java (original)
+++ webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/core/controller/AxisInvocationController.java Wed Sep 5 13:21:59 2007
@@ -81,6 +81,14 @@
* @see org.apache.axis2.jaxws.core.controller.InvocationController#invoke(org.apache.axis2.jaxws.core.InvocationContext)
*/
public MessageContext doInvoke(MessageContext request) {
+
+
+ //Make sure that a non-Async invocation does not have the ASYNC property setting
+ Boolean useAsyncMep = (Boolean) request.getProperties().get(Constants.USE_ASYNC_MEP);
+ if (useAsyncMep != null && useAsyncMep.booleanValue()){
+ throw ExceptionFactory.makeWebServiceException(Messages.getMessage("invalidMEP"));
+ }
+
// We need the qname of the operation being invoked to know which
// AxisOperation the OperationClient should be based on.
// Note that the OperationDesc is only set through use of the Proxy. Dispatch
@@ -109,6 +117,9 @@
try {
execute(opClient, true, axisRequestMsgCtx);
} catch (AxisFault af) {
+ // If an AxisFault was thrown, we need to cleanup the original OperationContext.
+ // Failure to do so results in a memory leak.
+ opClient.getOperationContext().cleanup();
// save the fault in case it didn't come from the endpoint, and thus
// there would be no message on the MessageContext
faultexception = af;
Modified: webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/message/Protocol.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/message/Protocol.java?rev=573047&r1=573046&r2=573047&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/message/Protocol.java (original)
+++ webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/message/Protocol.java Wed Sep 5 13:21:59 2007
@@ -24,6 +24,10 @@
import javax.xml.ws.http.HTTPBinding;
import javax.xml.ws.soap.SOAPBinding;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
/**
* Protocol Each message has a protocol (soap11, soap12, rest) This enum represents the protocol
* within the Message sub-component
@@ -33,11 +37,39 @@
private static final Log log = LogFactory.getLog(Protocol.class);
+ private static Map<String, Protocol> protocolMappings;
+
// These namespaces are used in the WSDL document to indentify a
// SOAP 1.1 vs. a SOAP 1.2 binding
private static final String SOAP11_WSDL_BINDING = "http://schemas.xmlsoap.org/wsdl/soap";
private static final String SOAP12_WSDL_BINDING = "http://schemas.xmlsoap.org/wsdl/soap12";
+ static {
+ // Normally a static HashMap can cause concurrency issues.
+ // However, if the HashMap is only queried (never modified) then
+ // access by multiple theads is safe.
+ protocolMappings = new HashMap<String, Protocol>();
+
+ protocolMappings.put(Protocol.SOAP11_WSDL_BINDING, Protocol.soap11);
+ protocolMappings.put(SOAPBinding.SOAP11HTTP_BINDING, Protocol.soap11);
+ protocolMappings.put(SOAPBinding.SOAP11HTTP_MTOM_BINDING, Protocol.soap11);
+ protocolMappings.put(Protocol.SOAP12_WSDL_BINDING, Protocol.soap12);
+ protocolMappings.put(SOAPBinding.SOAP12HTTP_BINDING, Protocol.soap12);
+ protocolMappings.put(SOAPBinding.SOAP12HTTP_MTOM_BINDING, Protocol.soap12);
+ protocolMappings.put(HTTPBinding.HTTP_BINDING, Protocol.rest);
+
+ // Add each of the URLs with a "/" at the end for flexibility
+ Map<String, Protocol> updates = new HashMap<String, Protocol>();
+ Iterator<String> keys = protocolMappings.keySet().iterator();
+ while (keys.hasNext()) {
+ String key = keys.next();
+ if (!key.endsWith("/")) {
+ updates.put(key + "/", protocolMappings.get(key));
+ }
+ }
+ protocolMappings.putAll(updates);
+ }
+
/**
* Return the right value for the Protocol based on the binding URL that was passed in.
*
@@ -50,44 +82,17 @@
log.debug("Configuring message protocol for binding [" + url + "]");
}
- if (namespaceEquals(Protocol.SOAP11_WSDL_BINDING, url) ||
- namespaceEquals(SOAPBinding.SOAP11HTTP_BINDING, url) ||
- namespaceEquals(SOAPBinding.SOAP11HTTP_MTOM_BINDING, url)) {
- if (debug) {
- log.debug("SOAP 1.1 protocol configured for message");
- }
- return Protocol.soap11;
- } else if (namespaceEquals(Protocol.SOAP12_WSDL_BINDING, url) ||
- namespaceEquals(SOAPBinding.SOAP12HTTP_BINDING, url) ||
- namespaceEquals(SOAPBinding.SOAP12HTTP_MTOM_BINDING, url)) {
- if (debug) {
- log.debug("SOAP 1.2 protocol configured for message");
+ Protocol proto = protocolMappings.get(url);
+ if (proto != null) {
+ if (log.isDebugEnabled()) {
+ log.debug("Found protocol mapping: " + proto);
}
- return Protocol.soap12;
- } else if (namespaceEquals(HTTPBinding.HTTP_BINDING, url)) {
- if (debug) {
- log.debug("XML/HTTP protocol configured for message");
- }
- return Protocol.rest;
+ return proto;
} else {
if (debug) {
log.debug("Protocol was not found for:" + url);
}
return null;
}
- }
-
- /*
- * Check to see if the two strings (namespaces) passed in are the same, but
- * also accounts for any trailing "/" characters in the string.
- */
- private static boolean namespaceEquals(String target, String input) {
- if (target.equals(input)) {
- return true;
- } else if ((target + "/").equals(input)) {
- return true;
- }
-
- return false;
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-cvs-help@ws.apache.org