use of org.apache.axiom.soap.SOAPFaultCode in project wso2-synapse by wso2.
the class MessageHelper method cloneSOAPFault.
/**
* Clones the SOAPFault, fault cloning is not the same as cloning the OMElement because if the
* Fault is accessed through the SOAPEnvelope.getBody().getFault() method it will lead to a
* class cast because the cloned element is just an OMElement but not a Fault.
*
* @param fault that needs to be cloned
* @return the cloned fault
*/
public static SOAPFault cloneSOAPFault(SOAPFault fault) {
SOAPFactory fac;
int soapVersion;
final int SOAP_11 = 1;
final int SOAP_12 = 2;
if (SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI.equals(fault.getNamespace().getNamespaceURI())) {
fac = OMAbstractFactory.getSOAP11Factory();
soapVersion = SOAP_11;
} else {
fac = OMAbstractFactory.getSOAP12Factory();
soapVersion = SOAP_12;
}
SOAPFault newFault = fac.createSOAPFault();
SOAPFaultCode code = fac.createSOAPFaultCode();
SOAPFaultReason reason = fac.createSOAPFaultReason();
switch(soapVersion) {
case SOAP_11:
code.setText(fault.getCode().getTextAsQName());
reason.setText(fault.getReason().getText());
break;
case SOAP_12:
SOAPFaultValue value = fac.createSOAPFaultValue(code);
value.setText(fault.getCode().getTextAsQName());
for (Object obj : fault.getReason().getAllSoapTexts()) {
SOAPFaultText text = fac.createSOAPFaultText();
text.setText(((SOAPFaultText) obj).getText());
reason.addSOAPText(text);
}
break;
}
newFault.setCode(code);
newFault.setReason(reason);
if (fault.getNode() != null) {
SOAPFaultNode soapfaultNode = fac.createSOAPFaultNode();
soapfaultNode.setNodeValue(fault.getNode().getNodeValue());
newFault.setNode(soapfaultNode);
}
if (fault.getRole() != null) {
SOAPFaultRole soapFaultRole = fac.createSOAPFaultRole();
soapFaultRole.setRoleValue(fault.getRole().getRoleValue());
newFault.setRole(soapFaultRole);
}
if (fault.getDetail() != null) {
SOAPFaultDetail soapFaultDetail = fac.createSOAPFaultDetail();
for (Iterator itr = fault.getDetail().getAllDetailEntries(); itr.hasNext(); ) {
Object element = itr.next();
if (element instanceof OMElement) {
soapFaultDetail.addDetailEntry(((OMElement) element).cloneOMElement());
}
}
newFault.setDetail(soapFaultDetail);
}
return newFault;
}
use of org.apache.axiom.soap.SOAPFaultCode in project wso2-synapse by wso2.
the class HessianTestHelper method addSoapFaultToMessageContext.
public void addSoapFaultToMessageContext(MessageContext msgContext, String faultCode, String faultReason, String faultDetail) throws AxisFault {
SOAPFactory factory = OMAbstractFactory.getSOAP11Factory();
SOAPEnvelope faultEnvelope = factory.getDefaultFaultEnvelope();
SOAPFault soapFault = faultEnvelope.getBody().getFault();
SOAPFaultCode soapFaultCode = factory.createSOAPFaultCode();
soapFaultCode.setText(faultCode);
soapFault.setCode(soapFaultCode);
SOAPFaultReason soapFaultReason = factory.createSOAPFaultReason();
soapFaultReason.setText(faultReason);
soapFault.setReason(soapFaultReason);
SOAPFaultDetail soapFaultDetail = factory.createSOAPFaultDetail();
soapFaultDetail.setText(faultDetail);
soapFault.setDetail(soapFaultDetail);
msgContext.setEnvelope(faultEnvelope);
}
use of org.apache.axiom.soap.SOAPFaultCode in project pentaho-platform by pentaho.
the class AbstractAxisServiceContentGenerator method handleFault.
protected void handleFault(MessageContext msgContext, OutputStream out, boolean http, Throwable e) throws IOException {
msgContext.setProperty(MessageContext.TRANSPORT_OUT, out);
MessageContext faultContext = MessageContextBuilder.createFaultMessageContext(msgContext, e);
// SOAP 1.2 specification mentions that we should send HTTP code 400 in a fault if the
// fault code Sender
HttpServletResponse response = http ? (HttpServletResponse) msgContext.getProperty(HTTPConstants.MC_HTTP_SERVLETRESPONSE) : null;
if (response != null) {
// TODO : Check for SOAP 1.2!
SOAPFaultCode code = faultContext.getEnvelope().getBody().getFault().getCode();
OMElement valueElement = null;
if (code != null) {
valueElement = code.getFirstChildWithName(new QName(SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI, SOAP12Constants.SOAP_FAULT_VALUE_LOCAL_NAME));
}
if (valueElement != null) {
if (SOAP12Constants.FAULT_CODE_SENDER.equals(valueElement.getTextAsQName().getLocalPart()) && !msgContext.isDoingREST()) {
response.sendError(HttpServletResponse.SC_BAD_REQUEST);
}
}
}
AxisEngine.sendFault(faultContext);
}
use of org.apache.axiom.soap.SOAPFaultCode in project carbon-business-process by wso2.
the class SOAPUtils method createSoapFault.
/**
* Crete SOAP Fault from fault information returned from ODE.
*
* @param bpelMessageContext DTO containing information on current messageflow.
* @param odeMessageContext ODE MyRoleMessageExchange containing information on current process
* invocation.
* @return SOAPFault instance
* @throws AxisFault in case of a error while creating SOAP Fault.
*/
public static SOAPFault createSoapFault(final BPELMessageContext bpelMessageContext, final MessageExchange odeMessageContext) throws AxisFault {
SOAPFactory soapFactory = bpelMessageContext.getSoapFactoryForCurrentMessageFlow();
OMElement detail = buildSoapDetail(bpelMessageContext, odeMessageContext);
SOAPFault fault = soapFactory.createSOAPFault();
SOAPFaultCode code = soapFactory.createSOAPFaultCode(fault);
code.setText(new QName(Namespaces.SOAP_ENV_NS, "Server"));
SOAPFaultReason reason = soapFactory.createSOAPFaultReason(fault);
reason.setText(odeMessageContext.getFault());
SOAPFaultDetail soapDetail = soapFactory.createSOAPFaultDetail(fault);
if (detail != null) {
soapDetail.addDetailEntry(detail);
}
return fault;
}
use of org.apache.axiom.soap.SOAPFaultCode in project webservices-axiom by apache.
the class TestBuilder method runTest.
@Override
protected void runTest() throws Throwable {
String soap11Message = "<?xml version='1.0' ?>" + "<env:Envelope xmlns:env=\"http://schemas.xmlsoap.org/soap/envelope/\">\n" + " <env:Header>\n" + " <test:echoOk xmlns:test=\"http://example.org/ts-tests\"\n" + " env:actor=\"http://schemas.xmlsoap.org/soap/actor/next\"\n" + " env:mustUnderstand=\"1\"" + " >\n" + " foo\n" + " </test:echoOk>\n" + " </env:Header>\n" + " <env:Body>\n" + " <env:Fault>\n" + " <faultcode>\n" + " env:Sender\n" + " </faultcode>\n" + " <faultstring>\n" + " Sender Timeout\n" + " </faultstring>\n" + " <faultactor>\n" + " http://schemas.xmlsoap.org/soap/envelope/actor/ultimateReceiver\n" + " </faultactor>\n" + " <detail xmlns:m=\"http:www.sample.org\">\n" + " Details of error\n" + " <m:MaxTime m:detail=\"This is only a test\">\n" + " P5M\n" + " </m:MaxTime>\n" + " <m:AveTime>\n" + " <m:Time>\n" + " P3M\n" + " </m:Time>\n" + " </m:AveTime>\n" + " </detail>\n" + " <n:Test xmlns:n=\"http:www.Test.org\">\n" + " <n:TestElement>\n" + " This is only a test\n" + " </n:TestElement>\n" + " </n:Test>\n" + " </env:Fault>\n" + " </env:Body>\n" + "</env:Envelope>";
OMXMLParserWrapper soap11Builder = OMXMLBuilderFactory.createSOAPModelBuilder(metaFactory, new StringReader(soap11Message));
SOAPEnvelope soap11Envelope = (SOAPEnvelope) soap11Builder.getDocumentElement();
// soap11Envelope.build();
// writer = XMLOutputFactory.newInstance().createXMLStreamWriter(System.out);
// soap11Envelope.internalSerializeAndConsume(writer);
// writer.flush();
assertTrue("SOAP 1.1 :- envelope local name mismatch", soap11Envelope.getLocalName().equals(SOAPConstants.SOAPENVELOPE_LOCAL_NAME));
assertTrue("SOAP 1.1 :- envelope namespace uri mismatch", soap11Envelope.getNamespace().getNamespaceURI().equals(SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI));
SOAPHeader header = soap11Envelope.getHeader();
assertTrue("SOAP 1.1 :- Header local name mismatch", header.getLocalName().equals(SOAPConstants.HEADER_LOCAL_NAME));
assertTrue("SOAP 1.1 :- Header namespace uri mismatch", header.getNamespace().getNamespaceURI().equals(SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI));
SOAPHeaderBlock headerBlock = (SOAPHeaderBlock) header.getFirstElement();
assertTrue("SOAP 1.1 :- Header block name mismatch", headerBlock.getLocalName().equals("echoOk"));
assertTrue("SOAP 1.1 :- Header block name space uri mismatch", headerBlock.getNamespace().getNamespaceURI().equals("http://example.org/ts-tests"));
assertTrue("SOAP 1.1 :- Headaer block text mismatch", headerBlock.getText().trim().equals("foo"));
// Attribute iteration is not in any guaranteed order.
// Use QNames to get the OMAttributes.
QName actorQName = new QName(SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI, SOAP11Constants.ATTR_ACTOR);
QName mustUnderstandQName = new QName(SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI, SOAP11Constants.ATTR_MUSTUNDERSTAND);
OMAttribute actorAttribute = headerBlock.getAttribute(actorQName);
OMAttribute mustUnderstandAttribute = headerBlock.getAttribute(mustUnderstandQName);
assertTrue("SOAP 1.1 :- Mustunderstand attribute not found", mustUnderstandAttribute != null);
assertTrue("SOAP 1.1 :- Mustunderstand value mismatch", mustUnderstandAttribute.getAttributeValue().equals(SOAPConstants.ATTR_MUSTUNDERSTAND_1));
assertTrue("SOAP 1.1 :- Mustunderstand attribute namespace uri mismatch", mustUnderstandAttribute.getNamespace().getNamespaceURI().equals(SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI));
assertTrue("SOAP 1.1 :- Actor attribute name not found", actorAttribute != null);
assertTrue("SOAP 1.1 :- Actor value mismatch", actorAttribute.getAttributeValue().trim().equals("http://schemas.xmlsoap.org/soap/" + SOAP11Constants.ATTR_ACTOR + "/" + "next"));
assertTrue("SOAP 1.1 :- Actor attribute namespace uri mismatch", actorAttribute.getNamespace().getNamespaceURI().equals(SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI));
SOAPBody body = soap11Envelope.getBody();
assertTrue("SOAP 1.1 :- Body local name mismatch", body.getLocalName().equals(SOAPConstants.BODY_LOCAL_NAME));
assertTrue("SOAP 1.1 :- Body namespace uri mismatch", body.getNamespace().getNamespaceURI().equals(SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI));
SOAPFault fault = body.getFault();
assertTrue("SOAP 1.1 :- Fault namespace uri mismatch", fault.getNamespace().getNamespaceURI().equals(SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI));
Iterator<OMNode> iteratorInFault = fault.getChildren();
iteratorInFault.next();
SOAPFaultCode code = (SOAPFaultCode) iteratorInFault.next();
assertEquals("SOAP Fault code local name mismatch", code.getLocalName(), (SOAP11Constants.SOAP_FAULT_CODE_LOCAL_NAME));
assertEquals("SOAP 1.1 :- Fault code value mismatch", code.getText().trim(), "env:Sender");
iteratorInFault.next();
SOAPFaultReason reason = (SOAPFaultReason) iteratorInFault.next();
assertTrue("SOAP 1.1 :- Fault string local name mismatch", reason.getLocalName().equals(SOAP11Constants.SOAP_FAULT_STRING_LOCAL_NAME));
assertTrue("SOAP 1.1 :- Fault string value mismatch", reason.getText().trim().equals("Sender Timeout"));
iteratorInFault.next();
SOAPFaultRole role = (SOAPFaultRole) iteratorInFault.next();
assertTrue("SOAP 1.1 :- Fault actor local name mismatch", role.getLocalName().equals(SOAP11Constants.SOAP_FAULT_ACTOR_LOCAL_NAME));
assertTrue("SOAP 1.1 :- Actor value mismatch", role.getText().trim().equals("http://schemas.xmlsoap.org/soap/envelope/actor/ultimateReceiver"));
iteratorInFault.next();
SOAPFaultDetail detail = (SOAPFaultDetail) iteratorInFault.next();
assertTrue("SOAP 1.1 :- Fault detail local name mismatch", detail.getLocalName().equals(SOAP11Constants.SOAP_FAULT_DETAIL_LOCAL_NAME));
assertTrue("SOAP 1.2 :- Text in detail mismatch", detail.getText().trim().equals("Details of error"));
Iterator<OMNode> iteratorInDetail = detail.getChildren();
iteratorInDetail.next();
OMElement element1 = (OMElement) iteratorInDetail.next();
assertTrue("SOAP 1.1 :- MaxTime element mismatch", element1.getLocalName().equals("MaxTime"));
assertTrue("SOAP 1.1 :- MaxTime element namespace mismatch", element1.getNamespace().getNamespaceURI().equals("http:www.sample.org"));
assertTrue("SOAP 1.1 :- Text value in MaxTime element mismatch", element1.getText().trim().equals("P5M"));
Iterator<OMAttribute> attributeIterator = element1.getAllAttributes();
OMAttribute attributeInMaxTime = attributeIterator.next();
assertTrue("SOAP 1.1 :- Attribute local name mismatch", attributeInMaxTime.getLocalName().equals("detail"));
assertTrue("SOAP 1.1 :- Attribute namespace mismatch", attributeInMaxTime.getNamespace().getNamespaceURI().equals("http:www.sample.org"));
assertTrue("SOAP 1.1 :- Attribute value mismatch", attributeInMaxTime.getAttributeValue().equals("This is only a test"));
iteratorInDetail.next();
OMElement element2 = (OMElement) iteratorInDetail.next();
assertTrue("SOAP 1.1 :- AveTime element mismatch", element2.getLocalName().equals("AveTime"));
assertTrue("SOAP 1.1 :- AveTime element namespace mismatch", element2.getNamespace().getNamespaceURI().equals("http:www.sample.org"));
Iterator<OMNode> iteratorInAveTimeElement = element2.getChildren();
iteratorInAveTimeElement.next();
OMElement element21 = (OMElement) iteratorInAveTimeElement.next();
assertTrue("SOAP 1.1 :- Time element mismatch", element21.getLocalName().equals("Time"));
assertTrue("SOAP 1.1 :- Time element namespace mismatch", element21.getNamespace().getNamespaceURI().equals("http:www.sample.org"));
assertTrue("SOAP 1.1 :- Text value in Time element mismatch", element21.getText().trim().equals("P3M"));
iteratorInFault.next();
OMElement testElement = (OMElement) iteratorInFault.next();
assertTrue("SOAP 1.1 :- Test element mismatch", testElement.getLocalName().equals("Test"));
assertTrue("SOAP 1.1 :- Test element namespace mismatch", testElement.getNamespace().getNamespaceURI().equals("http:www.Test.org"));
OMElement childOfTestElement = testElement.getFirstElement();
assertTrue("SOAP 1.1 :- Test element child local name mismatch", childOfTestElement.getLocalName().equals("TestElement"));
assertTrue("SOAP 1.1 :- Test element child namespace mismatch", childOfTestElement.getNamespace().getNamespaceURI().equals("http:www.Test.org"));
assertTrue("SOAP 1.1 :- Test element child value mismatch", childOfTestElement.getText().trim().equals("This is only a test"));
soap11Builder.close();
}
Aggregations