use of jakarta.xml.soap.Detail in project metro-jax-ws by eclipse-ee4j.
the class SOAPFaultBuilderTest method createFault.
private static SOAPFault createFault(SOAPVersion soapVersion) throws Exception {
SOAPFactory fac = soapVersion.getSOAPFactory();
SOAPFault sf = fac.createFault("This is a fault.", soapVersion.faultCodeClient);
Detail d = sf.addDetail();
SOAPElement de = d.addChildElement(DETAIL1_QNAME);
de.addAttribute(new QName("", "msg1"), "This is the first detail message.");
de = d.addChildElement(DETAIL2_QNAME);
de.addAttribute(new QName("", "msg2"), "This is the second detail message.");
return sf;
}
use of jakarta.xml.soap.Detail in project metro-jax-ws by eclipse-ee4j.
the class jaxws413Test method test2.
public void test2() throws SOAPException, IOException {
SOAPFault fault = SOAPVersion.SOAP_12.getSOAPFactory().createFault();
fault.setFaultCode(new QName("http://www.w3.org/2003/05/soap-envelope", "Sender", "myprefix"));
fault.setFaultString("Some exception");
Detail detail = fault.addDetail();
detail.addDetailEntry(new QName("http://foo/bar", "soap12detail"));
Message faultMsg = SOAPFaultBuilder.createSOAPFaultMessage(SOAPVersion.SOAP_12, fault);
SOAPMessage sm = faultMsg.readAsSOAPMessage();
Detail det = sm.getSOAPBody().getFault().getDetail();
Iterator iter = det.getDetailEntries();
assertTrue(iter.hasNext());
Element item = (Element) iter.next();
assertEquals(item.getNamespaceURI(), "http://foo/bar");
assertEquals(item.getLocalName(), "soap12detail");
}
use of jakarta.xml.soap.Detail in project metro-jax-ws by eclipse-ee4j.
the class SOAP11Fault method getProtocolException.
protected Throwable getProtocolException() {
try {
SOAPFault fault = SOAPVersion.SOAP_11.getSOAPFactory().createFault(faultstring, faultcode);
fault.setFaultActor(faultactor);
if (detail != null) {
Detail d = fault.addDetail();
for (Element det : detail.getDetails()) {
Node n = fault.getOwnerDocument().importNode(det, true);
d.appendChild(n);
}
}
return new ServerSOAPFaultException(fault);
} catch (SOAPException e) {
throw new WebServiceException(e);
}
}
use of jakarta.xml.soap.Detail in project metro-jax-ws by eclipse-ee4j.
the class SOAPFaultBuilder method createSOAP11Fault.
private static Message createSOAP11Fault(SOAPVersion soapVersion, Throwable e, Object detail, CheckedExceptionImpl ce, QName faultCode) {
SOAPFaultException soapFaultException = null;
String faultString = null;
String faultActor = null;
Throwable cause = e.getCause();
if (e instanceof SOAPFaultException) {
soapFaultException = (SOAPFaultException) e;
} else if (cause instanceof SOAPFaultException) {
soapFaultException = (SOAPFaultException) e.getCause();
}
if (soapFaultException != null) {
QName soapFaultCode = soapFaultException.getFault().getFaultCodeAsQName();
if (soapFaultCode != null)
faultCode = soapFaultCode;
faultString = soapFaultException.getFault().getFaultString();
faultActor = soapFaultException.getFault().getFaultActor();
}
if (faultCode == null) {
faultCode = getDefaultFaultCode(soapVersion);
}
if (faultString == null) {
faultString = e.getMessage();
if (faultString == null) {
faultString = e.toString();
}
}
Element detailNode = null;
QName firstEntry = null;
if (detail == null && soapFaultException != null) {
detailNode = soapFaultException.getFault().getDetail();
firstEntry = getFirstDetailEntryName((Detail) detailNode);
} else if (ce != null) {
try {
DOMResult dr = new DOMResult();
ce.getBond().marshal(detail, dr);
detailNode = (Element) dr.getNode().getFirstChild();
firstEntry = getFirstDetailEntryName(detailNode);
} catch (JAXBException e1) {
// Should we throw Internal Server Error???
faultString = e.getMessage();
faultCode = getDefaultFaultCode(soapVersion);
}
}
SOAP11Fault soap11Fault = new SOAP11Fault(faultCode, faultString, faultActor, detailNode);
// Don't fill the stacktrace for Service specific exceptions.
if (ce == null) {
soap11Fault.captureStackTrace(e);
}
Message msg = JAXBMessage.create(JAXB_CONTEXT, soap11Fault, soapVersion);
return new FaultMessage(msg, firstEntry);
}
use of jakarta.xml.soap.Detail in project metro-jax-ws by eclipse-ee4j.
the class SOAPFaultBuilder method createSOAP12Fault.
private static Message createSOAP12Fault(SOAPVersion soapVersion, Throwable e, Object detail, CheckedExceptionImpl ce, QName faultCode) {
SOAPFaultException soapFaultException = null;
CodeType code = null;
String faultString = null;
String faultRole = null;
String faultNode = null;
Throwable cause = e.getCause();
if (e instanceof SOAPFaultException) {
soapFaultException = (SOAPFaultException) e;
} else if (cause instanceof SOAPFaultException) {
soapFaultException = (SOAPFaultException) e.getCause();
}
if (soapFaultException != null) {
SOAPFault fault = soapFaultException.getFault();
QName soapFaultCode = fault.getFaultCodeAsQName();
if (soapFaultCode != null) {
faultCode = soapFaultCode;
code = new CodeType(faultCode);
Iterator<QName> iter = fault.getFaultSubcodes();
boolean first = true;
SubcodeType subcode = null;
while (iter.hasNext()) {
QName value = iter.next();
if (first) {
SubcodeType sct = new SubcodeType(value);
code.setSubcode(sct);
subcode = sct;
first = false;
continue;
}
subcode = fillSubcodes(subcode, value);
}
}
faultString = soapFaultException.getFault().getFaultString();
faultRole = soapFaultException.getFault().getFaultActor();
faultNode = soapFaultException.getFault().getFaultNode();
}
if (faultCode == null) {
faultCode = getDefaultFaultCode(soapVersion);
code = new CodeType(faultCode);
} else if (code == null) {
code = new CodeType(faultCode);
}
if (faultString == null) {
faultString = e.getMessage();
if (faultString == null) {
faultString = e.toString();
}
}
ReasonType reason = new ReasonType(faultString);
Element detailNode = null;
QName firstEntry = null;
if (detail == null && soapFaultException != null) {
detailNode = soapFaultException.getFault().getDetail();
firstEntry = getFirstDetailEntryName((Detail) detailNode);
} else if (detail != null) {
try {
DOMResult dr = new DOMResult();
ce.getBond().marshal(detail, dr);
detailNode = (Element) dr.getNode().getFirstChild();
firstEntry = getFirstDetailEntryName(detailNode);
} catch (JAXBException e1) {
// Should we throw Internal Server Error???
faultString = e.getMessage();
}
}
SOAP12Fault soap12Fault = new SOAP12Fault(code, reason, faultNode, faultRole, detailNode);
// Don't fill the stacktrace for Service specific exceptions.
if (ce == null) {
soap12Fault.captureStackTrace(e);
}
Message msg = JAXBMessage.create(JAXB_CONTEXT, soap12Fault, soapVersion);
return new FaultMessage(msg, firstEntry);
}
Aggregations