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.