Author: thomas.diesler(a)jboss.com
Date: 2008-02-28 09:19:53 -0500 (Thu, 28 Feb 2008)
New Revision: 5847
Modified:
stack/native/trunk/src/main/java/org/jboss/ws/core/jaxws/CustomizableJAXBContextFactory.java
stack/native/trunk/src/main/java/org/jboss/ws/core/jaxws/JAXBContextFactory.java
stack/native/trunk/src/test/java/org/jboss/test/ws/jaxws/jbws1857/JBWS1857TestCase.java
Log:
[JBWS-1857] JAXBContext created for every wrapper type
Count created jaxb contextes
Modified:
stack/native/trunk/src/main/java/org/jboss/ws/core/jaxws/CustomizableJAXBContextFactory.java
===================================================================
---
stack/native/trunk/src/main/java/org/jboss/ws/core/jaxws/CustomizableJAXBContextFactory.java 2008-02-28
14:00:01 UTC (rev 5846)
+++
stack/native/trunk/src/main/java/org/jboss/ws/core/jaxws/CustomizableJAXBContextFactory.java 2008-02-28
14:19:53 UTC (rev 5847)
@@ -21,18 +21,22 @@
*/
package org.jboss.ws.core.jaxws;
-import com.sun.xml.bind.api.JAXBRIContext;
-import com.sun.xml.bind.api.TypeReference;
-import com.sun.xml.bind.v2.model.annotation.RuntimeAnnotationReader;
+// $Id$
+
+import java.util.Collection;
+
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.JAXBException;
+
import org.jboss.logging.Logger;
import org.jboss.ws.WSException;
import org.jboss.wsf.spi.binding.BindingCustomization;
import org.jboss.wsf.spi.deployment.Endpoint;
import org.jboss.wsf.spi.invocation.EndpointAssociation;
-import javax.xml.bind.JAXBContext;
-import javax.xml.bind.JAXBException;
-import java.util.Collection;
+import com.sun.xml.bind.api.JAXBRIContext;
+import com.sun.xml.bind.api.TypeReference;
+import com.sun.xml.bind.v2.model.annotation.RuntimeAnnotationReader;
/**
* The default factory checks if a {@link JAXBBindingCustomization} exists
@@ -57,64 +61,65 @@
public JAXBContext createContext(Class clazz) throws WSException
{
- return createContext(new Class[] {clazz});
+ return createContext(new Class[] { clazz });
}
public JAXBContext createContext(Class[] clazzes) throws WSException
{
try
{
- BindingCustomization customization = getCustomization();
+ BindingCustomization bcust = getCustomization();
- JAXBContext jaxbCtx;
- if(null == customization)
+ JAXBContext jaxbCtx;
+ if (null == bcust)
jaxbCtx = JAXBContext.newInstance(clazzes);
else
- jaxbCtx = createContext(clazzes, customization);
+ jaxbCtx = createContext(clazzes, bcust);
+ incrementContextCount();
return jaxbCtx;
}
- catch (JAXBException e) {
+ catch (JAXBException e)
+ {
throw new WSException("Failed to create JAXBContext", e);
}
}
- public JAXBContext createContext(Class[] clazzes, BindingCustomization
bindingCustomization) throws WSException
+ public JAXBContext createContext(Class[] clazzes, BindingCustomization bcust) throws
WSException
{
try
{
- return JAXBContext.newInstance(clazzes, bindingCustomization);
+ JAXBContext jaxbCtx = JAXBContext.newInstance(clazzes, bcust);
+ incrementContextCount();
+ return jaxbCtx;
}
- catch (JAXBException e) {
+ catch (JAXBException e)
+ {
throw new WSException("Failed to create JAXBContext", e);
}
}
- public JAXBRIContext createContext(
- Class[] classes, Collection<TypeReference> typeReferences,
- String defaultNamespaceRemap, boolean c14nSupport, BindingCustomization
bindingCustomization)
+ public JAXBRIContext createContext(Class[] classes, Collection<TypeReference>
refs, String defaultNS, boolean c14n, BindingCustomization bcust)
{
try
{
- RuntimeAnnotationReader runtimeAnnotations = bindingCustomization!=null ?
-
(RuntimeAnnotationReader)bindingCustomization.get(JAXBRIContext.ANNOTATION_READER) :
null;
+ RuntimeAnnotationReader anReader = null;
+ if (bcust != null)
+ anReader =
(RuntimeAnnotationReader)bcust.get(JAXBRIContext.ANNOTATION_READER);
- return JAXBRIContext.newInstance(
- classes, typeReferences,
- null,
- defaultNamespaceRemap, c14nSupport ,
- runtimeAnnotations
- );
-
+ JAXBRIContext jaxbCtx = JAXBRIContext.newInstance(classes, refs, null,
defaultNS, c14n, anReader);
+ incrementContextCount();
+ return jaxbCtx;
}
- catch (JAXBException e) {
+ catch (JAXBException e)
+ {
throw new WSException("Failed to create JAXBContext", e);
}
}
private BindingCustomization getCustomization()
{
- Endpoint threadLocal = EndpointAssociation.getEndpoint();
- return threadLocal!=null ?
threadLocal.getAttachment(BindingCustomization.class):null;
+ Endpoint ep = EndpointAssociation.getEndpoint();
+ return ep != null ? ep.getAttachment(BindingCustomization.class) : null;
}
}
Modified:
stack/native/trunk/src/main/java/org/jboss/ws/core/jaxws/JAXBContextFactory.java
===================================================================
---
stack/native/trunk/src/main/java/org/jboss/ws/core/jaxws/JAXBContextFactory.java 2008-02-28
14:00:01 UTC (rev 5846)
+++
stack/native/trunk/src/main/java/org/jboss/ws/core/jaxws/JAXBContextFactory.java 2008-02-28
14:19:53 UTC (rev 5847)
@@ -21,26 +21,30 @@
*/
package org.jboss.ws.core.jaxws;
+// $Id$
+
+import java.util.Collection;
+
+import javax.xml.bind.JAXBContext;
+
import org.jboss.ws.WSException;
+import org.jboss.wsf.spi.binding.BindingCustomization;
import org.jboss.wsf.spi.util.ServiceLoader;
-import org.jboss.wsf.spi.binding.BindingCustomization;
-import javax.xml.bind.JAXBContext;
-
+import com.sun.xml.bind.api.JAXBRIContext;
import com.sun.xml.bind.api.TypeReference;
-import com.sun.xml.bind.api.JAXBRIContext;
-import java.util.Collection;
-
/**
* Creates JAXBContext's.<p>
*
* @author Heiko.Braun(a)jboss.com
* Created: Jun 26, 2007
*/
-public abstract class JAXBContextFactory {
-
+public abstract class JAXBContextFactory
+{
public final static String DEFAULT_JAXB_CONTEXT_FACTORY =
"org.jboss.ws.core.jaxws.CustomizableJAXBContextFactory";
+
+ private static ThreadLocal threadContextCount = new ThreadLocal();
public abstract JAXBContext createContext(Class[] clazzes, BindingCustomization
bindingCustomization) throws WSException;
@@ -48,10 +52,29 @@
public abstract JAXBContext createContext(Class clazz) throws WSException;
- public abstract JAXBRIContext createContext(
- Class[] classes, Collection<TypeReference> typeReferences,
- String defaultNamespaceRemap, boolean c14nSupport, BindingCustomization
bindingCustomization);
+ public abstract JAXBRIContext createContext(Class[] classes,
Collection<TypeReference> typeReferences, String defaultNamespaceRemap, boolean
c14nSupport,
+ BindingCustomization bindingCustomization);
+ protected void incrementContextCount()
+ {
+ Integer count = getContextCount();
+ threadContextCount.set(new Integer(count + 1));
+ }
+
+ public static Integer getContextCount()
+ {
+ Integer count = (Integer)threadContextCount.get();
+ if (count == null)
+ count = new Integer(0);
+
+ return count;
+ }
+
+ public static void resetContextCount()
+ {
+ threadContextCount.set(new Integer(0));
+ }
+
/**
* Retrieve JAXBContextFactory instance through the {@link
org.jboss.wsf.spi.util.ServiceLoader}.
* Defaults to {@link CustomizableJAXBContextFactory}
@@ -59,9 +82,6 @@
*/
public static JAXBContextFactory newInstance()
{
- return (JAXBContextFactory)ServiceLoader.loadService(
- JAXBContextFactory.class.getName(),
- DEFAULT_JAXB_CONTEXT_FACTORY
- );
+ return
(JAXBContextFactory)ServiceLoader.loadService(JAXBContextFactory.class.getName(),
DEFAULT_JAXB_CONTEXT_FACTORY);
}
}
Modified:
stack/native/trunk/src/test/java/org/jboss/test/ws/jaxws/jbws1857/JBWS1857TestCase.java
===================================================================
---
stack/native/trunk/src/test/java/org/jboss/test/ws/jaxws/jbws1857/JBWS1857TestCase.java 2008-02-28
14:00:01 UTC (rev 5846)
+++
stack/native/trunk/src/test/java/org/jboss/test/ws/jaxws/jbws1857/JBWS1857TestCase.java 2008-02-28
14:19:53 UTC (rev 5847)
@@ -27,6 +27,7 @@
import javax.xml.ws.Service;
import org.jboss.test.ws.jaxws.jbws1857.types.Stammdaten;
+import org.jboss.ws.core.jaxws.JAXBContextFactory;
import org.jboss.wsf.test.JBossWSTest;
/**
@@ -39,17 +40,14 @@
*/
public class JBWS1857TestCase extends JBossWSTest
{
-
public void testPortCreation() throws Exception
{
File wsdlFile = new
File("resources/jaxws/jbws1857/StammdatenService.wsdl");
QName serviceName = new QName("http://example.com",
"StammdatenService");
Service service = Service.create(wsdlFile.toURL(), serviceName);
- long start = System.currentTimeMillis();
service.getPort(Stammdaten.class);
- long time = start - System.currentTimeMillis();
-
- assertTrue("Creation of the port took too long", time < 20000);
+ Integer ctxCount = JAXBContextFactory.getContextCount();
+ assertTrue("Too many JAXB context: " + ctxCount, ctxCount < 3);
}
}