You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@cxf.apache.org by "Jeffrey Poore (JIRA)" <ji...@apache.org> on 2010/04/02 16:12:27 UTC
[jira] Resolved: (CXF-2741) JAXB hang on JBoss 5.1.0
[ https://issues.apache.org/jira/browse/CXF-2741?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Jeffrey Poore resolved CXF-2741.
--------------------------------
Resolution: Not A Problem
Appears to be some kind of JVM issue unrelated to CXF.
> JAXB hang on JBoss 5.1.0
> ------------------------
>
> Key: CXF-2741
> URL: https://issues.apache.org/jira/browse/CXF-2741
> Project: CXF
> Issue Type: Bug
> Components: JAXB Databinding
> Affects Versions: 2.2.6
> Environment: JBoss 5.1.0.GA, Spring 2.5.6, javax.ws.rs.jsr311-api 1.1
> Reporter: Jeffrey Poore
>
> We have been using CXF RESTFul services for a long time on jboss-4.2.3 with no issues. When we switched to JBoss 5.1.0.GA, things worked fine at first, but we noticed that after a short period of uptime, requests began to hang and time out. Debugging this issue, we tracked it to the synchronized block in AbstractJAXBProvider.java:
> {code}
> JAXBElementProvider(AbstractJAXBProvider).getPackageContext(Class<?>) line: 377
> JAXBElementProvider(AbstractJAXBProvider).getJAXBContext(Class<?>, Type) line: 354
> JAXBElementProvider(AbstractJAXBProvider).createMarshaller(Object, Class<?>, Type, String) line: 453
> JAXBElementProvider.marshal(Object, Class<?>, Type, String, OutputStream, MediaType) line: 296
> JAXBElementProvider.writeTo(Object, Class<?>, Type, Annotation[], MediaType, MultivaluedMap<String,Object>, OutputStream) line: 219
> JAXRSOutInterceptor.serializeMessage(Message, Response, OperationResourceInfo, boolean) line: 241
> JAXRSOutInterceptor.processResponse(Message) line: 138
> JAXRSOutInterceptor.handleMessage(Message) line: 77
> PhaseInterceptorChain.doIntercept(Message) line: 243
> OutgoingChainInterceptor.handleMessage(Message) line: 76
> PhaseInterceptorChain.doIntercept(Message) line: 243
> ChainInitiationObserver.onMessage(Message) line: 109
> ServletDestination.invoke(ServletConfig, ServletContext, HttpServletRequest, HttpServletResponse) line: 98
> ServletController.invokeDestination(HttpServletRequest, HttpServletResponse, ServletDestination) line: 406
> ServletController.invoke(HttpServletRequest, HttpServletResponse) line: 139
> CXFServlet(AbstractCXFServlet).invoke(HttpServletRequest, HttpServletResponse) line: 142
> CXFServlet(AbstractHTTPServlet).handleRequest(HttpServletRequest, HttpServletResponse) line: 179
> CXFServlet(AbstractHTTPServlet).doGet(HttpServletRequest, HttpServletResponse) line: 108
> CXFServlet(HttpServlet).service(HttpServletRequest, HttpServletResponse) line: 617
> CXFServlet(AbstractHTTPServlet).service(ServletRequest, ServletResponse) line: 159
> ApplicationFilterChain.internalDoFilter(ServletRequest, ServletResponse) line: 290
> ApplicationFilterChain.doFilter(ServletRequest, ServletResponse) line: 206
> ReplyHeaderFilter.doFilter(ServletRequest, ServletResponse, FilterChain) line: 96
> ApplicationFilterChain.internalDoFilter(ServletRequest, ServletResponse) line: 235
> ApplicationFilterChain.doFilter(ServletRequest, ServletResponse) line: 206
> StandardWrapperValve.invoke(Request, Response) line: 235
> StandardContextValve.invoke(Request, Response) line: 191
> SecurityAssociationValve.invoke(Request, Response) line: 190
> JaccContextValve.invoke(Request, Response) line: 92
> SecurityContextEstablishmentValve.process(Request, Response, HttpEvent) line: 126
> SecurityContextEstablishmentValve.invoke(Request, Response) line: 70
> StandardHostValve.invoke(Request, Response) line: 127
> ErrorReportValve.invoke(Request, Response) line: 102
> CachedConnectionValve.invoke(Request, Response) line: 158
> StandardEngineValve.invoke(Request, Response) line: 109
> CoyoteAdapter.service(Request, Response) line: 330
> Http11Processor.process(Socket) line: 829
> Http11Protocol$Http11ConnectionHandler.process(Socket) line: 598
> JIoEndpoint$Worker.run() line: 447
> Thread.run() line: 619
> {code}
> Specifically, this method:
> {code}
> public JAXBContext getPackageContext(Class<?> type) {
> if (type == null || type == JAXBElement.class) {
> return null;
> }
> synchronized (packageContexts) {
> String packageName = PackageUtils.getPackageName(type);
> JAXBContext context = packageContexts.get(packageName);
> if (context == null) {
> try {
> context = JAXBContext.newInstance(packageName, type.getClassLoader(), cProperties);
> packageContexts.put(packageName, context);
> } catch (JAXBException ex) {
> LOG.fine("Error creating a JAXBContext using ObjectFactory : "
> + ex.getMessage());
> return null;
> }
> }
> return context;
> }
> }
> {code}
> It appears that something is holding on to the synchronized lock on packageContexts and thus calls just block. Any help on this would be appreciated.
> We are just trying to call a simple CXF service that uses JSR-311 annotated methods and uses JAXB as the data binding. The class and method being called look like this:
> {code}
> @Path("/LDAP/")
> public class LdapServicesImpl implements LdapServices {
> @GET
> @Path("/lookup/")
> @Produces("text/xml")
> @Override
> public SearchResult lookupUser(@Context UriInfo ui) {
> String userid = ui.getQueryParameters().getFirst("uid");
> SearchResult result = getLDAPInfo(userid);
> ...
> return result;
> }
> {code}
> SearchResult is our JAXB annotated class:
> {code}
> @XmlAccessorType(XmlAccessType.FIELD)
> @XmlType(name = "SearchResult", namespace = "urn:ldap", propOrder = {
> "ldapUsers",
> "error"
> })
> @XmlRootElement(name = "searchResult", namespace = "urn:ldap")
> public class SearchResult
> implements Serializable
> {
> private final static long serialVersionUID = 987654321L;
> @XmlElement(namespace = "urn:ldap")
> protected LdapUsers ldapUsers;
> @XmlElement(namespace = "urn:ldap")
> protected String error;
> ... getters and setters ...
> }
> LdapUsers:
> @XmlAccessorType(XmlAccessType.FIELD)
> @XmlType(name = "LdapUsers", namespace = "urn:ldap", propOrder = {
> "ldapUsers"
> })
> public class LdapUsers
> implements Serializable
> {
> private final static long serialVersionUID = 987654321L;
> @XmlElement(name = "ldapUser", namespace = "urn:ldap")
> protected List<LdapUser> ldapUsers;
> ... getters and setters ...
> }
> LdapUser:
> @XmlAccessorType(XmlAccessType.FIELD)
> @XmlType(name = "LdapUser", namespace = "urn:ldap", propOrder = {
> "id",
> "fullName",
> "firstName",
> "middleName",
> "lastName",
> "address",
> "city",
> "state",
> "zip",
> "entityCode",
> "telephone",
> "title",
> "dn",
> "mail",
> "emsrowid",
> "community",
> "objectClasses",
> "groups"
> })
> public class LdapUser
> implements Serializable
> {
> private final static long serialVersionUID = 987654321L;
> @XmlElement(namespace = "urn:ldap", required = true)
> protected String id;
> @XmlElement(namespace = "urn:ldap", required = true)
> protected String fullName;
> @XmlElement(namespace = "urn:ldap", required = true)
> protected String firstName;
> @XmlElement(namespace = "urn:ldap", required = true)
> protected String middleName;
> @XmlElement(namespace = "urn:ldap", required = true)
> protected String lastName;
> @XmlElement(namespace = "urn:ldap", required = true)
> protected String address;
> @XmlElement(namespace = "urn:ldap", required = true)
> protected String city;
> @XmlElement(namespace = "urn:ldap", required = true)
> protected String state;
> @XmlElement(namespace = "urn:ldap", required = true)
> protected String zip;
> @XmlElement(namespace = "urn:ldap", required = true)
> protected String entityCode;
> @XmlElement(namespace = "urn:ldap", required = true)
> protected String telephone;
> @XmlElement(namespace = "urn:ldap", required = true)
> protected String title;
> @XmlElement(namespace = "urn:ldap", required = true)
> protected String dn;
> @XmlElement(namespace = "urn:ldap", required = true)
> protected String mail;
> @XmlElement(namespace = "urn:ldap", required = true)
> protected String emsrowid;
> @XmlElement(namespace = "urn:ldap", required = true)
> protected String community;
> @XmlElement(namespace = "urn:ldap", required = true)
> protected ObjectClasses objectClasses;
> @XmlElement(namespace = "urn:ldap", required = true)
> protected Groups groups;
> ... getters and setters ...
> }
> {code}
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.