[jbossws-issues] [JBoss JIRA] Created: (JBWS-2572) Marshalling JAXB element over SOAPHeader produces an empty element

Jose Antonio (JIRA) jira-events at lists.jboss.org
Wed Mar 11 07:03:22 EDT 2009


Marshalling JAXB element over SOAPHeader produces an empty element
------------------------------------------------------------------

                 Key: JBWS-2572
                 URL: https://jira.jboss.org/jira/browse/JBWS-2572
             Project: JBoss Web Services
          Issue Type: Bug
      Security Level: Public (Everyone can see)
          Components: jbossws-native
    Affects Versions: jbossws-native-3.0.5
         Environment: JDK 1.6, JBoss 4.2.3, Ubuntu Linux 8.10
            Reporter: Jose Antonio


Hello, I'm trying to set some ws security headers manually in a handler for a Web service client and server. I have generated JAXB bindings from WS Security schema and in the client, I generate a Security element with a UserNameToken inside. Then, I try to put it in the headers in my handler like this:

public boolean handleMessage(SOAPMessageContext context) {
............................................
ObjectFactory fact = new ObjectFactory();
JAXBElement<SecurityHeaderType> secHead = fact.createSecurity(sec);

Marshaller marshaller = ctx.createMarshaller();

SOAPEnvelope envelope = context.getMessage().getSOAPPart().getEnvelope();
SOAPHeader header = (envelope.getHeader() == null) ? envelope.addHeader() : envelope.getHeader();
marshaller.marshal(secHead,header);

sec is a JAXB element with the Security element content and is not null and not empty. If I execute my client with this handler in local, using JAX-WS RI 2.1, I get the expected behavior and I get a header with a Security element and a UserNameToken inside. But when I deploy my client in JBoss and try to execute it, I get an empty Security element. There is no UserNameToken inside.
I tried the following workaround and it works for JBoss:

DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document doc = builder.newDocument();
marshaller.marshal(secHead, doc);

SOAPFactory sFact = SOAPFactory.newInstance();
header.appendChild(sFact.createElement(doc.getDocumentElement()));

However, it's not the optimum way of doing it, since I need to create two factories and an intermediary document only to append a child to a header, while it could be done only with one sencence.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: https://jira.jboss.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        



More information about the jbossws-issues mailing list