Author: thomas.diesler(a)jboss.com
Date: 2006-10-19 07:49:39 -0400 (Thu, 19 Oct 2006)
New Revision: 1271
Modified:
trunk/src/main/java/org/jboss/ws/deployment/JSR181ClientMetaDataBuilder.java
trunk/src/main/java/org/jboss/ws/deployment/JSR181MetaDataBuilder.java
Log:
Lazily construct JAXBContext
Modified: trunk/src/main/java/org/jboss/ws/deployment/JSR181ClientMetaDataBuilder.java
===================================================================
---
trunk/src/main/java/org/jboss/ws/deployment/JSR181ClientMetaDataBuilder.java 2006-10-19
11:06:38 UTC (rev 1270)
+++
trunk/src/main/java/org/jboss/ws/deployment/JSR181ClientMetaDataBuilder.java 2006-10-19
11:49:39 UTC (rev 1271)
@@ -76,8 +76,7 @@
// Process @WebMethod
processWebMethods(epMetaData, wsClass, true);
- // Build JAXB Context
- createJAXBContext(epMetaData.getInterfaceQName().getNamespaceURI());
+ // Populate parameter xmlTypes
populateXmlTypes(epMetaData);
// Eager initialization
Modified: trunk/src/main/java/org/jboss/ws/deployment/JSR181MetaDataBuilder.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/deployment/JSR181MetaDataBuilder.java 2006-10-19
11:06:38 UTC (rev 1270)
+++ trunk/src/main/java/org/jboss/ws/deployment/JSR181MetaDataBuilder.java 2006-10-19
11:49:39 UTC (rev 1271)
@@ -193,8 +193,7 @@
boolean includeAllMethods = (wsClass == seiClass);
processWebMethods(sepMetaData, wsClass, includeAllMethods);
- // Build JAXB Context
- createJAXBContext(sepMetaData.getInterfaceQName().getNamespaceURI());
+ // Populate parameter xmlTypes
populateXmlTypes(sepMetaData);
// Process or generate WSDL
@@ -250,49 +249,57 @@
typeRefs.clear();
}
- protected void createJAXBContext(String targetNamespace)
+ protected JAXBRIContext getJAXBContext(EndpointMetaData epMetaData)
{
- try
+ if (jaxbCtx == null)
{
- log.debug("createJAXBContext [types=" + javaTypes + ",refs="
+ typeRefs + ",tns=" + targetNamespace + "]");
- jaxbCtx = JAXBRIContext.newInstance(javaTypes.toArray(new Class[0]), typeRefs,
targetNamespace, false);
+ try
+ {
+ String targetNS = epMetaData.getInterfaceQName().getNamespaceURI();
+ log.debug("JAXBContext [types=" + javaTypes + ",tns=" +
targetNS + "]");
+ jaxbCtx = JAXBRIContext.newInstance(javaTypes.toArray(new Class[0]),
typeRefs, targetNS, false);
+ }
+ catch (JAXBException ex)
+ {
+ log.error("Cannot build JAXB context", ex);
+ }
}
- catch (JAXBException ex)
- {
- throw new WSException("Could not create JAXB Context: " +
ex.getMessage(), ex);
- }
+ return jaxbCtx;
}
- protected void populateXmlTypes(EndpointMetaData endpoint)
+ protected void populateXmlTypes(EndpointMetaData epMetaData)
{
- TypesMetaData types = endpoint.getServiceMetaData().getTypesMetaData();
- for (OperationMetaData operation : endpoint.getOperations())
+ for (OperationMetaData operation : epMetaData.getOperations())
{
- for (ParameterMetaData parameter : operation.getParameters())
+ for (ParameterMetaData paramMetaData : operation.getParameters())
{
- populateXmlType(types, parameter);
+ populateXmlType(paramMetaData);
}
ParameterMetaData returnParameter = operation.getReturnParameter();
if (returnParameter != null)
- populateXmlType(types, returnParameter);
+ populateXmlType(returnParameter);
}
}
- private void populateXmlType(TypesMetaData types, ParameterMetaData parameter)
+ private void populateXmlType(ParameterMetaData paramMetaData)
{
+ EndpointMetaData epMetaData =
paramMetaData.getOperationMetaData().getEndpointMetaData();
+ TypesMetaData types = epMetaData.getServiceMetaData().getTypesMetaData();
+ JAXBRIContext jaxbCtx = getJAXBContext(epMetaData);
+
try
{
- QName xmlName = parameter.getXmlName();
- QName xmlType = jaxbCtx.getTypeName(new TypeReference(xmlName,
parameter.getJavaType()));
+ QName xmlName = paramMetaData.getXmlName();
+ QName xmlType = jaxbCtx.getTypeName(new TypeReference(xmlName,
paramMetaData.getJavaType()));
if (xmlType != null)
{
- parameter.setXmlType(xmlType);
- types.addTypeMapping(new TypeMappingMetaData(types, xmlType,
parameter.getJavaTypeName()));
+ paramMetaData.setXmlType(xmlType);
+ types.addTypeMapping(new TypeMappingMetaData(types, xmlType,
paramMetaData.getJavaTypeName()));
}
}
catch (Exception ex)
{
- log.warn("Could not load type: " + parameter.getXmlName());
+ log.warn("Cannot obtain xmlType for: " + paramMetaData.getXmlName());
}
}
@@ -866,7 +873,7 @@
opMetaData.addExtension(addrExt);
}
- protected void processOrGenerateWSDL(Class wsClass, ServiceMetaData serviceMetaData,
String wsdlLocation, EndpointMetaData endpointMetaData)
+ protected void processOrGenerateWSDL(Class wsClass, ServiceMetaData serviceMetaData,
String wsdlLocation, EndpointMetaData epMetaData)
{
if (wsdlLocation.length() > 0)
{
@@ -876,10 +883,9 @@
{
try
{
- UnifiedMetaData wsMetaData = serviceMetaData.getUnifiedMetaData();
String serviceName = serviceMetaData.getQName().getLocalPart();
- WSDLGenerator generator = new JAXBWSDLGenerator(jaxbCtx);
+ WSDLGenerator generator = new JAXBWSDLGenerator(getJAXBContext(epMetaData));
WSDLDefinitions wsdlDefinitions = generator.generate(serviceMetaData);
ServerConfigFactory factory = ServerConfigFactory.getInstance();