-
Bug
-
Resolution: Done
-
Major
-
jbossws-1.2.1, jbossws-2.0.1
-
None
service.getPort() may become an expensive operation (i.e., several seconds) when using a non-trivial WSDL with complex types. We have been able to track down our performance problems to an incorrect usage of JAXB-RI in JBOSS-JAXWS. According to https://wsit.dev.java.net/servlets/ReadMsg?list=dev&msgNo=66 creating new instances of JAXBContext is an expensive operation.
In our WSDL we counted 28 instance creations of JAXBContext. Most of them are created through the following call hierarchy:
JAXBContext.newInstance(Class[], Map<String,?>) line: 570
JAXBContext.newInstance(Class...) line: 522
JAXBAccessor$1.create(Class) line: 67
JAXBAccessor$1.create(ParameterMetaData) line: 54
ParameterMetaData.eagerInitialize() line: 470
OperationMetaData.eagerInitialize(List<Method>) line: 469
ClientEndpointMetaData(EndpointMetaData).eagerInitializeOperations() line: 516
ClientEndpointMetaData(EndpointMetaData).initializeInternal() line: 502
ClientEndpointMetaData(EndpointMetaData).eagerInitialize() line: 490
JAXWSClientMetaDataBuilder.rebuildEndpointMetaData(EndpointMetaData, Class<?>) line: 292
ServiceDelegateImpl.getPortInternal(EndpointMetaData, Class<T>) line: 274
ServiceDelegateImpl.getPort(QName, Class<T>) line: 200
A JProbe analysis (see attached file) revealed that actually most of the time (96.4%) of service.getPort() is spent in JAXBContext.newInstance(). Please see attached JProbe report.
Compared to JAX-WS RI (Metro) the performance of service.getPort() is extremely bad.
- is incorporated by
-
JBPAPP-831 JBossWS - JAXBContext created for every wrapper type
- Resolved