Search in sources :

Example 16 with SOAPFaultCode

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;
}
Also used : SOAPFaultCode(org.apache.axiom.soap.SOAPFaultCode) SOAPFaultRole(org.apache.axiom.soap.SOAPFaultRole) SOAPFaultReason(org.apache.axiom.soap.SOAPFaultReason) SOAPFaultValue(org.apache.axiom.soap.SOAPFaultValue) SOAPFaultDetail(org.apache.axiom.soap.SOAPFaultDetail) OMElement(org.apache.axiom.om.OMElement) SOAPFaultText(org.apache.axiom.soap.SOAPFaultText) SOAPFactory(org.apache.axiom.soap.SOAPFactory) SynapseMediationFlowPoint(org.apache.synapse.debug.constructs.SynapseMediationFlowPoint) Iterator(java.util.Iterator) SOAPFault(org.apache.axiom.soap.SOAPFault) SOAPFaultNode(org.apache.axiom.soap.SOAPFaultNode)

Example 17 with SOAPFaultCode

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);
}
Also used : SOAPFaultCode(org.apache.axiom.soap.SOAPFaultCode) SOAPFaultReason(org.apache.axiom.soap.SOAPFaultReason) SOAPFaultDetail(org.apache.axiom.soap.SOAPFaultDetail) SOAPFault(org.apache.axiom.soap.SOAPFault) SOAPEnvelope(org.apache.axiom.soap.SOAPEnvelope) SOAPFactory(org.apache.axiom.soap.SOAPFactory)

Example 18 with SOAPFaultCode

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);
}
Also used : SOAPFaultCode(org.apache.axiom.soap.SOAPFaultCode) QName(javax.xml.namespace.QName) HttpServletResponse(javax.servlet.http.HttpServletResponse) OMElement(org.apache.axiom.om.OMElement) MessageContext(org.apache.axis2.context.MessageContext)

Example 19 with SOAPFaultCode

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;
}
Also used : SOAPFaultCode(org.apache.axiom.soap.SOAPFaultCode) QName(javax.xml.namespace.QName) SOAPFaultReason(org.apache.axiom.soap.SOAPFaultReason) SOAPFaultDetail(org.apache.axiom.soap.SOAPFaultDetail) OMElement(org.apache.axiom.om.OMElement) SOAPFault(org.apache.axiom.soap.SOAPFault) SOAPFactory(org.apache.axiom.soap.SOAPFactory)

Example 20 with SOAPFaultCode

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();
}
Also used : SOAPFaultCode(org.apache.axiom.soap.SOAPFaultCode) SOAPFaultRole(org.apache.axiom.soap.SOAPFaultRole) QName(javax.xml.namespace.QName) SOAPFaultReason(org.apache.axiom.soap.SOAPFaultReason) SOAPFaultDetail(org.apache.axiom.soap.SOAPFaultDetail) SOAPHeaderBlock(org.apache.axiom.soap.SOAPHeaderBlock) OMElement(org.apache.axiom.om.OMElement) SOAPEnvelope(org.apache.axiom.soap.SOAPEnvelope) OMNode(org.apache.axiom.om.OMNode) SOAPBody(org.apache.axiom.soap.SOAPBody) StringReader(java.io.StringReader) SOAPFault(org.apache.axiom.soap.SOAPFault) OMXMLParserWrapper(org.apache.axiom.om.OMXMLParserWrapper) OMAttribute(org.apache.axiom.om.OMAttribute) SOAPHeader(org.apache.axiom.soap.SOAPHeader)

Aggregations

SOAPFaultCode (org.apache.axiom.soap.SOAPFaultCode)20 SOAPFault (org.apache.axiom.soap.SOAPFault)11 QName (javax.xml.namespace.QName)9 SOAPEnvelope (org.apache.axiom.soap.SOAPEnvelope)9 SOAPFaultReason (org.apache.axiom.soap.SOAPFaultReason)7 OMElement (org.apache.axiom.om.OMElement)6 SOAPFaultDetail (org.apache.axiom.soap.SOAPFaultDetail)6 SOAPFaultValue (org.apache.axiom.soap.SOAPFaultValue)6 SOAPFactory (org.apache.axiom.soap.SOAPFactory)4 SOAPFaultRole (org.apache.axiom.soap.SOAPFaultRole)4 OMNamespace (org.apache.axiom.om.OMNamespace)3 OMNode (org.apache.axiom.om.OMNode)3 SOAPBody (org.apache.axiom.soap.SOAPBody)3 SOAPFaultNode (org.apache.axiom.soap.SOAPFaultNode)3 SOAPFaultSubCode (org.apache.axiom.soap.SOAPFaultSubCode)3 SOAPFaultText (org.apache.axiom.soap.SOAPFaultText)3 StringReader (java.io.StringReader)2 OMAttribute (org.apache.axiom.om.OMAttribute)2 OMXMLParserWrapper (org.apache.axiom.om.OMXMLParserWrapper)2 SOAPHeader (org.apache.axiom.soap.SOAPHeader)2