Yes, you are right.
The HttpSoapClientMarshaler is only used on the consumer side in HttpSoapInvoker.
The HttpSoapConnector uses xfire for all soap related stuff.

Guillaume Nodet

[EMAIL PROTECTED] wrote:

Guillaume,

It appears as though the HttpSoapClientMarshaler.toNMS() is not ever called
when using the HttpSoapConnector, is that correct? What component is
responsible for extracting the Soap message from the HTTP request? Is this
performed by Xfire? Apparently, I made changes that work (i.e. the current
HttpSoapTest jUnit tests pass), but the modified service is never actually
called by the HttpSoapConnector. Can you please clarify the relationship
between the classes here?

regards,
/jonathan

-----Original Message-----
From: Guillaume Nodet [mailto:[EMAIL PROTECTED]
Sent: Tuesday, January 03, 2006 4:12 PM
To: [email protected]
Subject: Re: [servicemix-user] Problems with JSM flow and SOAP messages


Yes please, and attach your patches.
Thanks a lot !

Guillaume Nodet

[EMAIL PROTECTED] wrote:

Should I open a jira for this? One for the new feature in
HttpSoapClientMarshaller, and another for the potential defect in
SaajMarshaller?

/jonathan



-----Original Message-----
From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]
Sent: Tuesday, January 03, 2006 4:06 PM
To: [email protected]
Subject: RE: [servicemix-user] Problems with JSM flow and SOAP messages


The earlier submission had a possible NullPointerException
waiting to
happen; I've cleaned it up. The same is true of the current
SaajMarshaller.toNMS() method - a check should be performed on the result of
parent.getAttributes() before any further action is taken, or a
NullPointerException may be raised.

/jonathan

Code Follows

public void toNMS(NormalizedMessage normalizedMessage,
HttpMethod
method) throws Exception {
      addNmsProperties(normalizedMessage, method);
      String response = method.getResponseBodyAsString();
Node node = sourceTransformer.toDOMNode(new StringSource(response));
      CachedXPathAPI cachedXPathAPI = new CachedXPathAPI();
NodeIterator iterator = cachedXPathAPI.selectNodeIterator(node,
              "/*/*[local-name()='Body']/*");
      Node root = iterator.nextNode();

      /*
       * Copy embedded namespaces from the envelope into the body,
similarly
       * to the SaajMarshaller.toNMS() method.
       */
for (Node parent = root.getParentNode(); parent != null; parent =
parent.getParentNode()) {
          NamedNodeMap attributes = parent.getAttributes();
          if (attributes != null) {
              for (int i = 0; i < attributes.getLength(); i++) {
                  Attr att = (Attr) attributes.item(i);
                  if (att.getName().startsWith("xmlns:")
                          &&
root.getAttributes().getNamedItemNS(att.getNamespaceURI(),
                                  att.getLocalName()) == null) {
if (root.getNodeType() ==
Node.ELEMENT_NODE) {
                          ((Element)
root).setAttributeNS(att.getNamespaceURI(),
                                  att.getName(),
                                  att.getValue());
                      }
                  }
              }
          }
      }

      normalizedMessage.setContent(new DOMSource(root));
}





Reply via email to