You are viewing a plain text version of this content. The canonical link for it is here.
Posted to axis-cvs@ws.apache.org by sc...@apache.org on 2007/02/05 21:38:09 UTC
svn commit: r503860 - in /webservices/axis2/trunk/java/modules:
jaxws/src/org/apache/axis2/jaxws/marshaller/impl/alt/
jaxws/src/org/apache/axis2/jaxws/message/databinding/
jaxws/test/org/apache/axis2/jaxws/framework/
jaxws/test/org/apache/axis2/jaxws/m...
Author: scheu
Date: Mon Feb 5 12:38:08 2007
New Revision: 503860
URL: http://svn.apache.org/viewvc?view=rev&rev=503860
Log:
AXIS2-2114
Contributor: Rich Scheuerle (Discussed With Nikhil Thaker)
Changes to the JAXBUtils pooling code added small test
Added:
webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/misc/JAXBContextTest.java
Modified:
webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/marshaller/impl/alt/DocLitBareMethodMarshaller.java
webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/marshaller/impl/alt/DocLitWrappedMethodMarshaller.java
webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/marshaller/impl/alt/DocLitWrappedPlusMethodMarshaller.java
webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/marshaller/impl/alt/MethodMarshallerUtils.java
webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/marshaller/impl/alt/RPCLitMethodMarshaller.java
webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/message/databinding/JAXBBlockContext.java
webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/message/databinding/JAXBUtils.java
webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/framework/JAXWSTest.java
webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/EndpointDescription.java
webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/impl/EndpointDescriptionImpl.java
webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/impl/PackageSetBuilder.java
Modified: webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/marshaller/impl/alt/DocLitBareMethodMarshaller.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/marshaller/impl/alt/DocLitBareMethodMarshaller.java?view=diff&rev=503860&r1=503859&r2=503860
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/marshaller/impl/alt/DocLitBareMethodMarshaller.java (original)
+++ webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/marshaller/impl/alt/DocLitBareMethodMarshaller.java Mon Feb 5 12:38:08 2007
@@ -19,7 +19,7 @@
package org.apache.axis2.jaxws.marshaller.impl.alt;
import java.util.List;
-import java.util.Set;
+import java.util.TreeSet;
import javax.xml.ws.WebServiceException;
@@ -68,7 +68,7 @@
// 4) The type of the data block is defined by schema; thus in most cases
// an xsi:type will not be present
ParameterDescription[] pds =operationDesc.getParameterDescriptions();
- Set<String> packages = endpointDesc.getPackages();
+ TreeSet<String> packages = endpointDesc.getPackages();
// Get the return value.
Class returnType = operationDesc.getResultActualType();
@@ -116,7 +116,7 @@
// 4) The type of the data block (data:foo) is defined by schema (and probably
// is not present in the message
ParameterDescription[] pds =operationDesc.getParameterDescriptions();
- Set<String> packages = endpointDesc.getPackages();
+ TreeSet<String> packages = endpointDesc.getPackages();
// Unmarshal the ParamValues from the message
@@ -165,7 +165,7 @@
// Get the operation information
ParameterDescription[] pds =operationDesc.getParameterDescriptions();
- Set<String> packages = endpointDesc.getPackages();
+ TreeSet<String> packages = endpointDesc.getPackages();
// Create the message
MessageFactory mf = (MessageFactory)FactoryRegistry.getFactory(MessageFactory.class);
@@ -221,7 +221,7 @@
// Get the operation information
ParameterDescription[] pds =operationDesc.getParameterDescriptions();
- Set<String> packages = endpointDesc.getPackages();
+ TreeSet<String> packages = endpointDesc.getPackages();
// Create the message
MessageFactory mf = (MessageFactory)FactoryRegistry.getFactory(MessageFactory.class);
Modified: webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/marshaller/impl/alt/DocLitWrappedMethodMarshaller.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/marshaller/impl/alt/DocLitWrappedMethodMarshaller.java?view=diff&rev=503860&r1=503859&r2=503860
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/marshaller/impl/alt/DocLitWrappedMethodMarshaller.java (original)
+++ webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/marshaller/impl/alt/DocLitWrappedMethodMarshaller.java Mon Feb 5 12:38:08 2007
@@ -19,10 +19,10 @@
package org.apache.axis2.jaxws.marshaller.impl.alt;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.List;
import java.util.Map;
-import java.util.Set;
-import java.util.HashMap;
+import java.util.TreeSet;
import javax.jws.WebParam.Mode;
import javax.xml.bind.JAXBElement;
@@ -32,7 +32,6 @@
import org.apache.axis2.jaxws.description.EndpointDescription;
import org.apache.axis2.jaxws.description.EndpointInterfaceDescription;
import org.apache.axis2.jaxws.description.OperationDescription;
-import org.apache.axis2.jaxws.description.OperationDescriptionJava;
import org.apache.axis2.jaxws.description.ParameterDescription;
import org.apache.axis2.jaxws.i18n.Messages;
import org.apache.axis2.jaxws.marshaller.MethodMarshaller;
@@ -83,7 +82,7 @@
// 4) The type of the data block is defined by schema; thus in most cases
// an xsi:type will not be present
ParameterDescription[] pds =operationDesc.getParameterDescriptions();
- Set<String> packages = endpointDesc.getPackages();
+ TreeSet<String> packages = endpointDesc.getPackages();
// Determine if a returnValue is expected.
// The return value may be an child element
@@ -193,7 +192,7 @@
// 4) The type of the data block (data:foo) is defined by schema (and probably
// is not present in the message
ParameterDescription[] pds =operationDesc.getParameterDescriptions();
- Set<String> packages = endpointDesc.getPackages();
+ TreeSet<String> packages = endpointDesc.getPackages();
// In usage=WRAPPED, there will be a single JAXB block inside the body.
// Get this block
Modified: webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/marshaller/impl/alt/DocLitWrappedPlusMethodMarshaller.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/marshaller/impl/alt/DocLitWrappedPlusMethodMarshaller.java?view=diff&rev=503860&r1=503859&r2=503860
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/marshaller/impl/alt/DocLitWrappedPlusMethodMarshaller.java (original)
+++ webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/marshaller/impl/alt/DocLitWrappedPlusMethodMarshaller.java Mon Feb 5 12:38:08 2007
@@ -22,8 +22,8 @@
import java.util.Iterator;
import java.util.List;
import java.util.Map;
-import java.util.Set;
import java.util.HashMap;
+import java.util.TreeSet;
import javax.jws.WebMethod;
import javax.jws.WebParam;
@@ -130,7 +130,7 @@
// 4) The type of the data block is defined by schema; thus in most cases
// an xsi:type will not be present
ParameterDescription[] pds =operationDesc.getParameterDescriptions();
- Set<String> packages = endpointDesc.getPackages();
+ TreeSet<String> packages = endpointDesc.getPackages();
// Determine if a returnValue is expected.
// The return value may be an child element
@@ -270,7 +270,7 @@
// 4) The type of the data block (data:foo) is defined by schema (and probably
// is not present in the message
ParameterDescription[] pds =operationDesc.getParameterDescriptions();
- Set<String> packages = endpointDesc.getPackages();
+ TreeSet<String> packages = endpointDesc.getPackages();
// In usage=WRAPPED, there will be a single JAXB block inside the body.
// Get this block
@@ -381,7 +381,7 @@
// Get the operation information
ParameterDescription[] pds =operationDesc.getParameterDescriptions();
- Set<String> packages = endpointDesc.getPackages();
+ TreeSet<String> packages = endpointDesc.getPackages();
// Create the message
MessageFactory mf = (MessageFactory)FactoryRegistry.getFactory(MessageFactory.class);
@@ -569,7 +569,7 @@
// Put the object into the message
JAXBBlockFactory factory =
(JAXBBlockFactory)FactoryRegistry.getFactory(JAXBBlockFactory.class);
- Set<String> packages = endpointDesc.getPackages();
+ TreeSet<String> packages = endpointDesc.getPackages();
Block block = factory.createFrom(object,
new JAXBBlockContext(packages),
null); // The factory will get the qname from the value
Modified: webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/marshaller/impl/alt/MethodMarshallerUtils.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/marshaller/impl/alt/MethodMarshallerUtils.java?view=diff&rev=503860&r1=503859&r2=503860
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/marshaller/impl/alt/MethodMarshallerUtils.java (original)
+++ webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/marshaller/impl/alt/MethodMarshallerUtils.java Mon Feb 5 12:38:08 2007
@@ -25,7 +25,7 @@
import java.security.PrivilegedExceptionAction;
import java.util.ArrayList;
import java.util.List;
-import java.util.Set;
+import java.util.TreeSet;
import javax.jws.WebParam.Mode;
import javax.jws.soap.SOAPBinding.Style;
@@ -164,7 +164,7 @@
*/
static List<PDElement> getPDElements(ParameterDescription[] params,
Message message,
- Set<String> packages,
+ TreeSet<String> packages,
boolean isInput) throws XMLStreamException {
List<PDElement> pdeList = new ArrayList<PDElement>();
@@ -357,7 +357,7 @@
* @param isRPC
* @throws MessageException
*/
- static void toMessage(List<PDElement> pdeList, Message message, Set<String> packages, boolean isRPC) throws WebServiceException {
+ static void toMessage(List<PDElement> pdeList, Message message, TreeSet<String> packages, boolean isRPC) throws WebServiceException {
int totalBodyBlocks = 0;
for (int i=0; i<pdeList.size(); i++) {
@@ -421,7 +421,7 @@
Class returnType,
String returnNS,
String returnLocalPart,
- Set<String> packages,
+ TreeSet<String> packages,
Message message,
boolean isRPC,
boolean isHeader)
@@ -464,7 +464,7 @@
* @throws WebService
* @throws XMLStreamException
*/
- static Object getReturnValue(Set<String> packages,
+ static Object getReturnValue(TreeSet<String> packages,
Message message,
Class rpcType,
boolean isHeader,
@@ -503,7 +503,7 @@
*/
static void marshalFaultResponse(Throwable throwable,
OperationDescription operationDesc,
- Set<String> packages,
+ TreeSet<String> packages,
Message message,
boolean isRPC) {
// Get the root cause of the throwable object
@@ -695,7 +695,7 @@
* @throws InvocationTargetException
* @throws NoSuchMethodException
*/
- static Throwable demarshalFaultResponse(OperationDescription operationDesc, Set<String> packages,Message message, boolean isRPC)
+ static Throwable demarshalFaultResponse(OperationDescription operationDesc, TreeSet<String> packages,Message message, boolean isRPC)
throws WebServiceException, ClassNotFoundException, IllegalAccessException,
InstantiationException, XMLStreamException, InvocationTargetException, NoSuchMethodException {
Modified: webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/marshaller/impl/alt/RPCLitMethodMarshaller.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/marshaller/impl/alt/RPCLitMethodMarshaller.java?view=diff&rev=503860&r1=503859&r2=503860
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/marshaller/impl/alt/RPCLitMethodMarshaller.java (original)
+++ webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/marshaller/impl/alt/RPCLitMethodMarshaller.java Mon Feb 5 12:38:08 2007
@@ -19,7 +19,7 @@
package org.apache.axis2.jaxws.marshaller.impl.alt;
import java.util.List;
-import java.util.Set;
+import java.util.TreeSet;
import javax.jws.soap.SOAPBinding.Style;
import javax.xml.namespace.QName;
@@ -85,7 +85,7 @@
// Get the operation information
ParameterDescription[] pds =operationDesc.getParameterDescriptions();
- Set<String> packages = endpointDesc.getPackages();
+ TreeSet<String> packages = endpointDesc.getPackages();
// TODO This needs more work. We need to check inside holders of input params. We also
// may want to exclude header params from this check
@@ -161,7 +161,7 @@
// 5) We always send an xsi:type, but other vendor's may not.
// Get the operation information
ParameterDescription[] pds =operationDesc.getParameterDescriptions();
- Set<String> packages = endpointDesc.getPackages();
+ TreeSet<String> packages = endpointDesc.getPackages();
// Indicate that the style is RPC. This is important so that the message understands
// that the data blocks are underneath the operation element
@@ -236,7 +236,7 @@
// Get the operation information
ParameterDescription[] pds =operationDesc.getParameterDescriptions();
- Set<String> packages = endpointDesc.getPackages();
+ TreeSet<String> packages = endpointDesc.getPackages();
// Create the message
MessageFactory mf = (MessageFactory)FactoryRegistry.getFactory(MessageFactory.class);
@@ -330,7 +330,7 @@
// 5) We always send an xsi:type, but other vendor's may not.
// Get the operation information
ParameterDescription[] pds =operationDesc.getParameterDescriptions();
- Set<String> packages = endpointDesc.getPackages();
+ TreeSet<String> packages = endpointDesc.getPackages();
// Indicate that the style is RPC. This is important so that the message understands
// that the data blocks are underneath the operation element
Modified: webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/message/databinding/JAXBBlockContext.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/message/databinding/JAXBBlockContext.java?view=diff&rev=503860&r1=503859&r2=503860
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/message/databinding/JAXBBlockContext.java (original)
+++ webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/message/databinding/JAXBBlockContext.java Mon Feb 5 12:38:08 2007
@@ -16,8 +16,7 @@
*/
package org.apache.axis2.jaxws.message.databinding;
-import java.util.HashSet;
-import java.util.Set;
+import java.util.TreeSet;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
@@ -36,7 +35,7 @@
private static final Log log = LogFactory.getLog(JAXBBlockContext.class);
- private Set<String> contextPackages; // List of packages needed by the context
+ private TreeSet<String> contextPackages; // List of packages needed by the context
private JAXBContext jaxbContext = null;
// For RPC processing only
@@ -52,7 +51,7 @@
* Normal Constructor JAXBBlockContext
* @param packages Set of packages needed by the JAXBContext.
*/
- public JAXBBlockContext(Set<String> packages) {
+ public JAXBBlockContext(TreeSet<String> packages) {
this.contextPackages = packages;
}
@@ -62,7 +61,7 @@
* @deprecated
*/
public JAXBBlockContext(String contextPackage) {
- this.contextPackages = new HashSet();
+ this.contextPackages = new TreeSet();
this.contextPackages.add(contextPackage);
}
@@ -79,7 +78,7 @@
/**
* @return Class representing type of the element
*/
- public Set<String> getContextPackages() {
+ public TreeSet<String> getContextPackages() {
return contextPackages;
}
Modified: webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/message/databinding/JAXBUtils.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/message/databinding/JAXBUtils.java?view=diff&rev=503860&r1=503859&r2=503860
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/message/databinding/JAXBUtils.java (original)
+++ webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/message/databinding/JAXBUtils.java Mon Feb 5 12:38:08 2007
@@ -26,11 +26,10 @@
import java.util.ArrayList;
import java.util.Collections;
import java.util.Enumeration;
-import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
-import java.util.Set;
+import java.util.TreeSet;
import java.util.WeakHashMap;
import javax.xml.bind.JAXBContext;
@@ -61,8 +60,8 @@
// Create a synchronized map to get the JAXBObject: keys are ClassLoader and Set<String>.
// TODO We should change the key from Set<String> to an actual package ContextPath
- private static Map<ClassLoader, Map<Set<String>, JAXBContext> > jaxbMap =
- Collections.synchronizedMap(new WeakHashMap<ClassLoader, Map<Set<String>, JAXBContext> >());
+ private static Map<ClassLoader, Map<String, JAXBContext> > jaxbMap =
+ Collections.synchronizedMap(new WeakHashMap<ClassLoader, Map<String, JAXBContext> >());
private static JAXBContext genericJAXBContext = null;
private static Map<JAXBContext,Unmarshaller> umap =
@@ -90,7 +89,7 @@
* @return JAXBContext
* @throws JAXBException
*/
- public static JAXBContext getJAXBContext(Set<String> contextPackages) throws JAXBException {
+ public static JAXBContext getJAXBContext(TreeSet<String> contextPackages) throws JAXBException {
// JAXBContexts for the same class can be reused and are supposed to be thread-safe
if(log.isDebugEnabled()){
log.debug("Following packages are in this batch of getJAXBContext() :");
@@ -102,23 +101,31 @@
ClassLoader cl = getContextClassLoader();
// Get the innerMap
- Map<Set<String>, JAXBContext> innerMap = jaxbMap.get(cl);
+ Map<String, JAXBContext> innerMap = jaxbMap.get(cl);
if (innerMap == null) {
synchronized(jaxbMap) {
- innerMap = new WeakHashMap<Set<String>, JAXBContext>();
+ innerMap = new WeakHashMap<String, JAXBContext>();
jaxbMap.put(cl, Collections.synchronizedMap(innerMap));
}
}
if (contextPackages == null) {
- contextPackages = new HashSet<String>();
+ contextPackages = new TreeSet<String>();
}
- JAXBContext context = innerMap.get(contextPackages);
+ JAXBContext context = innerMap.get(contextPackages.toString());
if (context == null) {
synchronized(innerMap) {
+ // A pooled context was not found, so create one and put it in the map.
+
+ // A copy is made of the original list of packages because createJAXBContext may
+ // prune the list.
+ TreeSet<String> origContextPackages = new TreeSet<String>(contextPackages);
context = createJAXBContext(contextPackages, cl);
- innerMap.put(contextPackages, context);
+
+ // Put the new context in the map keyed by both the original and current list of packages
+ innerMap.put(origContextPackages.toString(), context);
+ innerMap.put(contextPackages.toString(), context);
if (log.isDebugEnabled()) {
log.debug("JAXBContext [created] for " + contextPackages.toString());
}
@@ -138,7 +145,7 @@
* @return JAXBContext
* @throws JAXBException
*/
- private static JAXBContext createJAXBContext(Set<String> contextPackages, ClassLoader cl) throws JAXBException {
+ private static JAXBContext createJAXBContext(TreeSet<String> contextPackages, ClassLoader cl) throws JAXBException {
JAXBContext context = null;
if(log.isDebugEnabled()){
@@ -148,7 +155,7 @@
}
}
// The contextPackages is a set of package names that are constructed using PackageSetBuilder.
- // PackageSetBuilder gets the packages names from the following sources.
+ // PackageSetBuilder gets the packages names from various sources.
// a) It walks the various annotations on the WebService collecting package names.
// b) It walks the wsdl/schemas and builds package names for each target namespace.
//
@@ -231,6 +238,19 @@
}
}
+ // The code above may have removed some packages from the list.
+ // Retry our lookup with the updated list
+ Map<String, JAXBContext> innerMap = jaxbMap.get(cl);
+ if (innerMap != null) {
+ context = innerMap.get(contextPackages.toString());
+ if (context != null) {
+ if (log.isDebugEnabled()) {
+ log.debug("Successfully found JAXBContext with updated context list:" + context.toString());
+ }
+ return context;
+ }
+ }
+
// CONTEXT construction
if (contextConstruction) {
context = createJAXBContextUsingContextPath(contextPackages, cl);
@@ -291,7 +311,9 @@
if (log.isDebugEnabled()) {
log.debug("Unmarshaller placed back into pool");
}
- umap.put(context, unmarshaller);
+ if (ENABLE_ADV_POOLING) {
+ umap.put(context, unmarshaller);
+ }
}
/**
@@ -335,7 +357,9 @@
if (log.isDebugEnabled()) {
log.debug("Marshaller placed back into pool");
}
- mmap.put(context, marshaller);
+ if (ENABLE_ADV_POOLING) {
+ mmap.put(context, marshaller);
+ }
}
/**
@@ -378,7 +402,9 @@
if (log.isDebugEnabled()) {
log.debug("JAXBIntrospector placed back into pool");
}
- imap.put(context, introspector);
+ if (ENABLE_ADV_POOLING) {
+ imap.put(context, introspector);
+ }
}
/**
@@ -409,7 +435,7 @@
}
try {
- Class cls = Class.forName(p + ".package-info",false, cl);
+ Class cls = forName(p + ".package-info",false, cl);
if (cls != null) {
return true;
}
@@ -432,7 +458,7 @@
* @param cl ClassLoader
* @return JAXBContext or null if unsuccessful
*/
- private static JAXBContext createJAXBContextUsingContextPath(Set<String> packages, ClassLoader cl) {
+ private static JAXBContext createJAXBContextUsingContextPath(TreeSet<String> packages, ClassLoader cl) {
JAXBContext context = null;
String contextpath = "";
@@ -490,7 +516,7 @@
}
}
try {
- //If Calsses not found in directory then look for jar that has these classes
+ //If Clases not found in directory then look for jar that has these classes
if(classes.size() <=0){
//This will load classes from jar file.
ClassFinderFactory cff = (ClassFinderFactory)FactoryRegistry.getFactory(ClassFinderFactory.class);
@@ -689,6 +715,13 @@
// NOTE: This method must remain private because it uses AccessController
JAXBContext jaxbContext = null;
try {
+ if (log.isDebugEnabled()) {
+ if (context== null || context.length() == 0) {
+ log.debug("JAXBContext is constructed without a context String.");
+ } else {
+ log.debug("JAXBContext is constructed with a context of:" + context);
+ }
+ }
jaxbContext = (JAXBContext) AccessController.doPrivileged(
new PrivilegedExceptionAction() {
public Object run() throws JAXBException {
@@ -716,6 +749,13 @@
// NOTE: This method must remain private because it uses AccessController
JAXBContext jaxbContext = null;
try {
+ if (log.isDebugEnabled()) {
+ if (classArray== null || classArray.length == 0) {
+ log.debug("JAXBContext is constructed with 0 input classes.");
+ } else {
+ log.debug("JAXBContext is constructed with " + classArray.length + " input classes.");
+ }
+ }
jaxbContext = (JAXBContext) AccessController.doPrivileged(
new PrivilegedExceptionAction() {
public Object run() throws JAXBException {
Modified: webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/framework/JAXWSTest.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/framework/JAXWSTest.java?view=diff&rev=503860&r1=503859&r2=503860
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/framework/JAXWSTest.java (original)
+++ webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/framework/JAXWSTest.java Mon Feb 5 12:38:08 2007
@@ -46,6 +46,7 @@
import org.apache.axis2.jaxws.message.SAAJConverterTests;
import org.apache.axis2.jaxws.message.SOAP12Tests;
import org.apache.axis2.jaxws.message.XMLStreamReaderSplitterTests;
+import org.apache.axis2.jaxws.misc.JAXBContextTest;
import org.apache.axis2.jaxws.misc.NS2PkgTest;
import org.apache.axis2.jaxws.nonanonymous.complextype.NonAnonymousComplexTypeTests;
import org.apache.axis2.jaxws.polymorphic.shape.tests.PolymorphicTests;
@@ -148,6 +149,7 @@
suite.addTestSuite(AnyTypeTests.class);
suite.addTestSuite(PolymorphicTests.class);
suite.addTestSuite(NS2PkgTest.class);
+ suite.addTestSuite(JAXBContextTest.class);
// Start (and stop) the server only once for all the tests
TestSetup testSetup = new TestSetup(suite) {
public void setUp() {
Added: webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/misc/JAXBContextTest.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/misc/JAXBContextTest.java?view=auto&rev=503860
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/misc/JAXBContextTest.java (added)
+++ webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/misc/JAXBContextTest.java Mon Feb 5 12:38:08 2007
@@ -0,0 +1,84 @@
+/**
+ *
+ */
+package org.apache.axis2.jaxws.misc;
+
+import java.util.TreeSet;
+import java.util.Set;
+
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.JAXBException;
+
+import org.apache.axis2.jaxws.message.databinding.JAXBUtils;
+import org.apache.axis2.jaxws.util.JavaUtils;
+
+import junit.framework.TestCase;
+
+/**
+ * Tests Namespace to Package Algorithmh
+ *
+ */
+public class JAXBContextTest extends TestCase {
+
+ /**
+ * Test basic functionality of JAXBUtils pooling
+ * @throws Exception
+ */
+ public void test01() throws JAXBException {
+
+ // Get a JAXBContext
+ TreeSet<String> context1 = new TreeSet<String>();
+ context1.add("org.test.addnumbers");
+ context1.add("org.test.anytype");
+
+ JAXBContext jaxbContext1 = JAXBUtils.getJAXBContext(context1);
+
+ // Assert that the JAXBContext was found and the context contains the two valid packages
+ assertTrue(jaxbContext1 != null);
+ assertTrue(context1.contains("org.test.addnumbers"));
+ assertTrue(context1.contains("org.test.anytype"));
+
+ // Repeat with the same packages
+ TreeSet<String> context2 = new TreeSet<String>();
+ context2.add("org.test.addnumbers");
+ context2.add("org.test.anytype");
+
+ JAXBContext jaxbContext2 = JAXBUtils.getJAXBContext(context2);
+
+ // The following assertion is probably true,but GC may have wiped out the weak reference
+ //assertTrue(jaxbContext2 == jaxbContext1);
+ assertTrue(jaxbContext2 != null);
+ assertTrue(jaxbContext2.toString().equals(jaxbContext1.toString()));
+ assertTrue(context2.contains("org.test.addnumbers"));
+ assertTrue(context2.contains("org.test.anytype"));
+
+ // Repeat with the same packages + an invalid package
+ TreeSet<String> context3 = new TreeSet<String>();
+ context3.add("org.test.addnumbers");
+ context3.add("org.test.anytype");
+ context3.add("my.grandma.loves.jaxws");
+
+ JAXBContext jaxbContext3 = JAXBUtils.getJAXBContext(context3);
+
+ // The following assertion is probably true,but GC may have wiped out the weak reference
+ //assertTrue(jaxbContext3 == jaxbContext1);
+ assertTrue(jaxbContext3 != null);
+ assertTrue(jaxbContext1.toString().equals(jaxbContext1.toString()));
+ assertTrue(context3.contains("org.test.addnumbers"));
+ assertTrue(context3.contains("org.test.anytype"));
+ assertTrue(!context3.contains("my.grandma.loves.jaxws")); // invalid package should be silently removed
+
+ // Repeat with a subset of packages
+ TreeSet<String> context4 = new TreeSet<String>();
+ context4.add("org.test.addnumbers");
+
+
+ JAXBContext jaxbContext4 = JAXBUtils.getJAXBContext(context4);
+
+ assertTrue(jaxbContext4 != null);
+ assertTrue(jaxbContext4 != jaxbContext3);
+ assertTrue(context4.contains("org.test.addnumbers"));
+
+
+ }
+}
Modified: webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/EndpointDescription.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/EndpointDescription.java?view=diff&rev=503860&r1=503859&r2=503860
==============================================================================
--- webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/EndpointDescription.java (original)
+++ webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/EndpointDescription.java Mon Feb 5 12:38:08 2007
@@ -19,7 +19,7 @@
package org.apache.axis2.jaxws.description;
import java.util.List;
-import java.util.Set;
+import java.util.TreeSet;
import javax.xml.namespace.QName;
import javax.xml.ws.Service;
@@ -116,7 +116,7 @@
* JAXBContext.
* @return Set<Package>
*/
- public Set<String> getPackages();
+ public TreeSet<String> getPackages();
public QName getPortType();
}
Modified: webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/impl/EndpointDescriptionImpl.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/impl/EndpointDescriptionImpl.java?view=diff&rev=503860&r1=503859&r2=503860
==============================================================================
--- webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/impl/EndpointDescriptionImpl.java (original)
+++ webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/impl/EndpointDescriptionImpl.java Mon Feb 5 12:38:08 2007
@@ -22,6 +22,7 @@
import java.util.List;
import java.util.Map;
import java.util.Set;
+import java.util.TreeSet;
import javax.jws.WebService;
import javax.wsdl.Binding;
@@ -110,7 +111,7 @@
DescriptionBuilderComposite composite = null;
// Set of packages that are needed to marshal/unmashal data (used to set JAXBContext)
- Set<String> packages = null;
+ TreeSet<String> packages = null;
// The JAX-WS Handler port information corresponding to this endpoint
private PortInfo portInfo;
@@ -1223,7 +1224,7 @@
* JAXBContext.
* @return Set<Package>
*/
- public Set<String> getPackages() {
+ public TreeSet<String> getPackages() {
// @REVIEW Currently the package set is stored on the
// EndpointDescription. We may consider moving this to
// ServiceDescription.
@@ -1240,7 +1241,7 @@
// So for now we will do both.
boolean doSchemaWalk = true;
boolean doAnnotationWalk = true;
- packages = new HashSet<String>();
+ packages = new TreeSet<String>();
if (doSchemaWalk) {
packages.addAll(PackageSetBuilder.getPackagesFromSchema(this.getServiceDescription()));
}
Modified: webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/impl/PackageSetBuilder.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/impl/PackageSetBuilder.java?view=diff&rev=503860&r1=503859&r2=503860
==============================================================================
--- webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/impl/PackageSetBuilder.java (original)
+++ webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/impl/PackageSetBuilder.java Mon Feb 5 12:38:08 2007
@@ -21,8 +21,8 @@
import java.lang.reflect.Method;
import java.net.MalformedURLException;
import java.net.URL;
-import java.util.HashSet;
import java.util.Set;
+import java.util.TreeSet;
import javax.wsdl.Definition;
import javax.wsdl.WSDLException;
@@ -86,9 +86,9 @@
* @param serviceDesc ServiceDescription
* @return Set of Packages
*/
- public static Set<String> getPackagesFromSchema(ServiceDescription serviceDesc) {
+ public static TreeSet<String> getPackagesFromSchema(ServiceDescription serviceDesc) {
boolean annotationWalking = true;
- Set<String> set = new HashSet<String>();
+ TreeSet<String> set = new TreeSet<String>();
//If we are on client side we will get wsdl definition from ServiceDescription. If we are on server side we will have to
//read wsdlLocation from @WebService Annotation.
ServiceDescriptionWSDL sdw = (ServiceDescriptionWSDL) serviceDesc;
@@ -133,8 +133,8 @@
* @param serviceDescription ServiceDescription
* @return Set of Packages
*/
- public static Set<String> getPackagesFromAnnotations(ServiceDescription serviceDesc) {
- HashSet<String> set = new HashSet<String>();
+ public static TreeSet<String> getPackagesFromAnnotations(ServiceDescription serviceDesc) {
+ TreeSet<String> set = new TreeSet<String>();
EndpointDescription[] endpointDescs = serviceDesc.getEndpointDescriptions();
// Build a set of packages from all of the endpoints
@@ -150,11 +150,11 @@
* @param endpointDesc EndpointDescription
* @return Set of Packages
*/
- public static Set<String> getPackagesFromAnnotations(EndpointDescription endpointDesc) {
+ public static TreeSet<String> getPackagesFromAnnotations(EndpointDescription endpointDesc) {
EndpointInterfaceDescription endpointInterfaceDesc =
endpointDesc.getEndpointInterfaceDescription();
if (endpointInterfaceDesc == null) {
- return new HashSet<String>();
+ return new TreeSet<String>();
} else {
return getPackagesFromAnnotations(endpointInterfaceDesc);
}
@@ -164,8 +164,8 @@
* @param endpointInterfaceDescription EndpointInterfaceDescription
* @return Set of Packages
*/
- public static Set<String> getPackagesFromAnnotations(EndpointInterfaceDescription endpointInterfaceDesc) {
- HashSet<String> set = new HashSet<String>();
+ public static TreeSet<String> getPackagesFromAnnotations(EndpointInterfaceDescription endpointInterfaceDesc) {
+ TreeSet<String> set = new TreeSet<String>();
OperationDescription[] opDescs = endpointInterfaceDesc.getOperations();
// Build a set of packages from all of the opertions
@@ -182,7 +182,7 @@
* @param opDesc OperationDescription
* @param set Set<Package> that is updated
*/
- private static void getPackagesFromAnnotations(OperationDescription opDesc, Set<String> set) {
+ private static void getPackagesFromAnnotations(OperationDescription opDesc, TreeSet<String> set) {
// Walk the parameter information
ParameterDescription[] parameterDescs = opDesc.getParameterDescriptions();
@@ -235,7 +235,7 @@
* @param paramDesc ParameterDesc
* @param set Set<Package> that is updated
*/
- private static void getPackagesFromAnnotations(ParameterDescription paramDesc, Set<String> set) {
+ private static void getPackagesFromAnnotations(ParameterDescription paramDesc, TreeSet<String> set) {
// Get the type that defines the actual data. (this is never a holder )
Class paramClass = paramDesc.getParameterActualType();
@@ -251,7 +251,7 @@
* @param faultDesc FaultDescription
* @param set Set<Package> that is updated
*/
- private static void getPackagesFromAnnotations(FaultDescription faultDesc, Set<String> set) {
+ private static void getPackagesFromAnnotations(FaultDescription faultDesc, TreeSet<String> set) {
Class faultBean = loadClass(faultDesc.getFaultBean());
if (faultBean != null) {
@@ -266,7 +266,7 @@
* @param localPart of the element
* @param set with both type and element packages set
*/
- private static void setTypeAndElementPackages(Class cls, String namespace, String localPart, Set<String> set) {
+ private static void setTypeAndElementPackages(Class cls, String namespace, String localPart, TreeSet<String> set) {
// Get the element and type classes
Class eClass = getElement(cls);
---------------------------------------------------------------------
To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-cvs-help@ws.apache.org