cxf-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Ault, Matt" <Matt.A...@elavon.com>
Subject Possible Issue in org.apache.cxf.jaxws.interceptors.SwAOutInterceptor
Date Thu, 21 May 2009 20:04:03 GMT
I believe I have found a possible issue in the org.apache.cxf.jaxws.interceptors.SwAOutInterceptor.
 The functionality appears to have changed between 2.1.3 and 2.2.1.  I'm not sure which is
the correct functionality so I thought I'd post here first.

This problem occurs when you have a JAXBContextImplementation that does not have a hasSwaRef
method.  I found this issue when moving a service from Tomcat to WebSphere.  IBM uses a different
implementation of JAXBContext by default and IBM's version doesn't have a hasSwaRef method
on it.

In 2.2.1 this results in a NullPointerException in this block of code:

 1    private boolean callSWARefMethod(JAXBContext ctx) {
 2        Method m = SWA_REF_METHOD.get(ctx.getClass().getName());
 3        if (m == null && !SWA_REF_METHOD.containsKey(ctx.getClass().getName()))
{
 4            try {
 5                m = ctx.getClass().getMethod("hasSwaRef", new Class[0]);
 6            } catch (Exception e) {
 7                //ignore
 8            }
 9            SWA_REF_METHOD.put(ctx.getClass().getName(), m);
10        }
11        try {
12            return (Boolean)m.invoke(ctx);
13        } catch (Exception e) {
14            return false;
15        }
16    }

This throws the NPE at line 9 SWA_REF_METHOD.put(ctx.getClass().getName(), m); because m is
null.  In JDK 1.6.07 ConcurrentHashMap.put() throws a NullPointerException when the value
is null.  This causes a SOAPFault to be returned to the client.

I believe that this code should just return false if the hasSwaRef method doesn't exist (which
is how this operates in 2.1.3).  If the put() wasn't called when m is null, then this code
should return true if the method exists and false if it doesn't.

Fortunately, I can work around this by setting the javax.xml.bind.JAXBContext system property
to the Sun version (com.sun.xml.bind.v2.ContextFactory) which returns a JAXBContext that implements
hasSwaRef().

Let me know if you need any more information from me regarding this issue, I didn't post it
to JIRA since I wasn't sure if the code was performing correctly yet.


Matt Ault
Systems and Technology
Elavon

----------------------------------------- Note: The information
contained in this e-mail and in any attachments is intended only
for the person or entity to which it is addressed and may contain
confidential and/or privileged material. Any review,
retransmission, dissemination or other use of, or taking of any
action in reliance upon, this information by persons or entities
other than the intended recipient is prohibited. The recipient
should check this e-mail and any attachments for the presence of
viruses. Sender accepts no liability for any damages caused by any
virus transmitted by this e-mail. If you have received this e-mail
in error, please notify us immediately by replying to the message
and delete the e-mail from your computer.  Elavon (formerly NOVA
Information Systems)

Mime
View raw message