< prev index next >
jaxws/src/java.xml.ws/share/classes/com/sun/xml/internal/messaging/saaj/soap/impl/FaultImpl.java
Print this page
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
@@ -29,10 +29,11 @@
import java.util.logging.Level;
import javax.xml.namespace.QName;
import javax.xml.soap.*;
+import com.sun.xml.internal.messaging.saaj.util.SAAJUtil;
import org.w3c.dom.Element;
import com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl;
import com.sun.xml.internal.messaging.saaj.soap.SOAPDocumentImpl;
import com.sun.xml.internal.messaging.saaj.soap.name.NameImpl;
@@ -51,10 +52,13 @@
protected FaultImpl(SOAPDocumentImpl ownerDoc, NameImpl name) {
super(ownerDoc, name);
}
+ public FaultImpl(SOAPDocumentImpl ownerDoc, Element domElement) {
+ super(ownerDoc, domElement);
+ }
protected abstract NameImpl getDetailName();
protected abstract NameImpl getFaultCodeName();
protected abstract NameImpl getFaultStringName();
protected abstract NameImpl getFaultActorName();
@@ -81,10 +85,11 @@
protected void findFaultStringElement() {
this.faultStringElement =
(SOAPFaultElement) findAndConvertChildElement(getFaultStringName());
}
+ @Override
public void setFaultCode(String faultCode) throws SOAPException {
setFaultCode(
NameImpl.getLocalNameFromTagName(faultCode),
NameImpl.getPrefixFromTagName(faultCode),
null);
@@ -129,17 +134,19 @@
} else {
finallySetFaultCode(prefix + ":" + faultCode);
}
}
+ @Override
public void setFaultCode(Name faultCodeQName) throws SOAPException {
setFaultCode(
faultCodeQName.getLocalName(),
faultCodeQName.getPrefix(),
faultCodeQName.getURI());
}
+ @Override
public void setFaultCode(QName faultCodeQName) throws SOAPException {
setFaultCode(
faultCodeQName.getLocalPart(),
faultCodeQName.getPrefix(),
faultCodeQName.getNamespaceURI());
@@ -163,20 +170,22 @@
protected void initializeDetail() {
NameImpl detailName = getDetailName();
detail = (Detail) findAndConvertChildElement(detailName);
}
+ @Override
public Detail getDetail() {
if (detail == null)
initializeDetail();
if ((detail != null) && (detail.getParentNode() == null)) {
// a detach node was called on it
detail = null;
}
return detail;
}
+ @Override
public Detail addDetail() throws SOAPException {
if (detail == null)
initializeDetail();
if (detail == null) {
detail = createDetail();
@@ -186,40 +195,46 @@
// Log
throw new SOAPExceptionImpl("Error: Detail already exists");
}
}
+ @Override
public boolean hasDetail() {
return (getDetail() != null);
}
+ @Override
public abstract void setFaultActor(String faultActor) throws SOAPException;
+ @Override
public String getFaultActor() {
if (this.faultActorElement == null)
findFaultActorElement();
if (this.faultActorElement != null) {
return this.faultActorElement.getValue();
}
return null;
}
+ @Override
public SOAPElement setElementQName(QName newName) throws SOAPException {
log.log(
Level.SEVERE,
"SAAJ0146.impl.invalid.name.change.requested",
new Object[] {elementQName.getLocalPart(), newName.getLocalPart()});
throw new SOAPException(
"Cannot change name for " + elementQName.getLocalPart() + " to " + newName.getLocalPart());
}
+ @Override
protected SOAPElement convertToSoapElement(Element element) {
- if (element instanceof SOAPFaultElement) {
- return (SOAPElement) element;
- } else if (element instanceof SOAPElement) {
- SOAPElement soapElement = (SOAPElement) element;
+ final org.w3c.dom.Node soapNode = getSoapDocument().findIfPresent(element);
+ if (soapNode instanceof SOAPFaultElement) {
+ return (SOAPElement) soapNode;
+ } else if (soapNode instanceof SOAPElement) {
+ SOAPElement soapElement = (SOAPElement) soapNode;
if (getDetailName().equals(soapElement.getElementName())) {
return replaceElementWithSOAPElement(element, createDetail());
} else {
String localName =
soapElement.getElementName().getLocalName();
@@ -231,16 +246,16 @@
}
} else {
Name elementName = NameImpl.copyElementName(element);
ElementImpl newElement;
if (getDetailName().equals(elementName)) {
- newElement = (ElementImpl) createDetail();
+ newElement = createDetail();
} else {
String localName = elementName.getLocalName();
if (isStandardFaultElement(localName))
newElement =
- (ElementImpl) createSOAPFaultElement(elementName);
+ createSOAPFaultElement(elementName);
else
newElement = (ElementImpl) createElement(elementName);
}
return replaceElementWithSOAPElement(element, newElement);
}
@@ -282,10 +297,11 @@
// Log
throw new SOAPExceptionImpl("Error: Faultactor already exists");
}
}
+ @Override
protected SOAPElement addElement(Name name) throws SOAPException {
if (getDetailName().equals(name)) {
return addDetail();
} else if(getFaultCodeName().equals(name)) {
return addFaultCodeElement();
@@ -295,10 +311,11 @@
return addFaultActorElement();
}
return super.addElement(name);
}
+ @Override
protected SOAPElement addElement(QName name) throws SOAPException {
return addElement(NameImpl.convertToName(name));
}
protected FaultElementImpl addSOAPFaultElement(String localName)
@@ -309,10 +326,12 @@
return faultElem;
}
/**
* Convert an xml:lang attribute value into a Locale object
+ * @param xmlLang xml:lang attribute value
+ * @return Locale
*/
protected static Locale xmlLangToLocale(String xmlLang) {
if (xmlLang == null) {
return null;
}
< prev index next >