Repository: cxf Updated Branches: refs/heads/3.0.x-fixes b94ebcca7 -> 53e7752ff
[CXF-6919] For soap 1.2, make sure the fault code is valid Project: http://git-wip-us.apache.org/repos/asf/cxf/repo Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/69247884 Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/69247884 Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/69247884 Branch: refs/heads/3.0.x-fixes Commit: 6924788445ce33477162dd6076afe683c78babe2 Parents: b94ebcc Author: Daniel Kulp <dk...@apache.org> Authored: Wed Apr 5 11:29:05 2017 -0400 Committer: Daniel Kulp <dk...@apache.org> Committed: Wed Apr 5 15:18:36 2017 -0400 ---------------------------------------------------------------------- .../apache/cxf/binding/soap/saaj/SAAJUtils.java | 37 ++++++++++++++------ 1 file changed, 26 insertions(+), 11 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cxf/blob/69247884/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/saaj/SAAJUtils.java ---------------------------------------------------------------------- diff --git a/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/saaj/SAAJUtils.java b/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/saaj/SAAJUtils.java index 89cb7f7..0215519 100644 --- a/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/saaj/SAAJUtils.java +++ b/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/saaj/SAAJUtils.java @@ -21,12 +21,14 @@ package org.apache.cxf.binding.soap.saaj; import javax.xml.namespace.QName; import javax.xml.soap.SOAPBody; +import javax.xml.soap.SOAPConstants; import javax.xml.soap.SOAPElement; import javax.xml.soap.SOAPException; import javax.xml.soap.SOAPFault; import javax.xml.soap.SOAPHeader; import javax.xml.soap.SOAPMessage; +import org.apache.cxf.binding.soap.Soap12; import org.apache.cxf.common.util.StringUtils; /** @@ -52,20 +54,33 @@ public final class SAAJUtils { return m.getSOAPPart().getEnvelope().getBody(); } } + public static void setFaultCode(SOAPFault f, QName code) throws SOAPException { - try { - f.setFaultCode(code); - } catch (Throwable t) { - int count = 1; - String pfx = "fc1"; - while (!StringUtils.isEmpty(f.getNamespaceURI(pfx))) { - count++; - pfx = "fc" + count; + if (f.getNamespaceURI().equals(Soap12.SOAP_NAMESPACE)) { + try { + f.setFaultCode(code); + } catch (SOAPException ex) { + f.setFaultCode(SOAPConstants.SOAP_SENDER_FAULT); + f.appendFaultSubcode(code); + } + } else { + try { + f.setFaultCode(code); + } catch (Throwable t) { + int count = 1; + String pfx = "fc1"; + while (!StringUtils.isEmpty(f.getNamespaceURI(pfx))) { + count++; + pfx = "fc" + count; + } + if (code.getNamespaceURI() != null && !"".equals(code.getNamespaceURI())) { + f.addNamespaceDeclaration(pfx, code.getNamespaceURI()); + } else { + f.addNamespaceDeclaration(pfx, f.getNamespaceURI()); + } + f.setFaultCode(pfx + ":" + code.getLocalPart()); } - f.addNamespaceDeclaration(pfx, code.getNamespaceURI()); - f.setFaultCode(pfx + ":" + code.getLocalPart()); } - } public static SOAPElement adjustPrefix(SOAPElement e, String prefix) {