Search in sources :

Example 1 with Body

use of org.w3._2003._05.soap_envelope.Body in project arctic-sea by 52North.

the class Soap12Decoder method getBodyContent.

private OwsServiceRequest getBodyContent(EnvelopeDocument doc) throws DecodingException {
    Body body = doc.getEnvelope().getBody();
    try {
        Node domNode = body.getDomNode();
        if (domNode.hasChildNodes()) {
            NodeList childNodes = domNode.getChildNodes();
            for (int i = 0; i < childNodes.getLength(); i++) {
                Node node = childNodes.item(i);
                if (node.getNodeType() == Node.ELEMENT_NODE) {
                    XmlObject content = XmlObject.Factory.parse(node);
                    // fix problem with invalid prefix in xsi:type value for
                    // om:result, e.g. OM_SWEArrayObservation or
                    // gml:ReferenceType
                    Map<?, ?> namespaces = XmlHelper.getNamespaces(doc.getEnvelope());
                    fixNamespaceForXsiType(content, namespaces);
                    XmlHelper.fixNamespaceForXsiType(content, SweConstants.QN_DATA_ARRAY_PROPERTY_TYPE_SWE_200);
                    return decodeXmlElement(content);
                }
            }
        }
        return decodeXmlElement(body);
    } catch (XmlException xmle) {
        throw new DecodingException("Error while parsing SOAP body element!", xmle);
    }
}
Also used : XmlException(org.apache.xmlbeans.XmlException) Node(org.w3c.dom.Node) NodeList(org.w3c.dom.NodeList) XmlObject(org.apache.xmlbeans.XmlObject) DecodingException(org.n52.svalbard.decode.exception.DecodingException) Body(org.w3.x2003.x05.soapEnvelope.Body)

Example 2 with Body

use of org.w3._2003._05.soap_envelope.Body in project camel by apache.

the class Soap12DataFormatAdapter method doMarshal.

@Override
public Object doMarshal(Exchange exchange, Object inputObject, OutputStream stream, String soapAction) throws IOException {
    Body body = objectFactory.createBody();
    Header header = objectFactory.createHeader();
    Throwable exception = exchange.getProperty(Exchange.EXCEPTION_CAUGHT, Throwable.class);
    if (exception == null) {
        exception = exchange.getIn().getHeader(Exchange.EXCEPTION_CAUGHT, Throwable.class);
    }
    final List<Object> bodyContent;
    List<Object> headerContent = new ArrayList<Object>();
    if (exception != null) {
        bodyContent = new ArrayList<Object>();
        bodyContent.add(createFaultFromException(exception));
    } else {
        if (!dataFormat.isIgnoreUnmarshalledHeaders()) {
            List<Object> inboundSoapHeaders = (List<Object>) exchange.getIn().getHeader(SoapJaxbDataFormat.SOAP_UNMARSHALLED_HEADER_LIST);
            if (null != inboundSoapHeaders) {
                headerContent.addAll(inboundSoapHeaders);
            }
        }
        bodyContent = getDataFormat().createContentFromObject(inputObject, soapAction, headerContent);
    }
    for (Object elem : bodyContent) {
        body.getAny().add(elem);
    }
    for (Object elem : headerContent) {
        header.getAny().add(elem);
    }
    Envelope envelope = new Envelope();
    if (headerContent.size() > 0) {
        envelope.setHeader(header);
    }
    envelope.setBody(body);
    JAXBElement<Envelope> envelopeEl = objectFactory.createEnvelope(envelope);
    return envelopeEl;
}
Also used : Header(org.w3._2003._05.soap_envelope.Header) ArrayList(java.util.ArrayList) ArrayList(java.util.ArrayList) List(java.util.List) Envelope(org.w3._2003._05.soap_envelope.Envelope) Body(org.w3._2003._05.soap_envelope.Body)

Example 3 with Body

use of org.w3._2003._05.soap_envelope.Body in project arctic-sea by 52North.

the class Soap12Encoder method createSOAP12Envelope.

private XmlObject createSOAP12Envelope(SoapResponse response, EncodingContext additionalValues) throws EncodingException {
    String action = null;
    final EnvelopeDocument envelopeDoc = EnvelopeDocument.Factory.newInstance();
    final Envelope envelope = envelopeDoc.addNewEnvelope();
    final Body body = envelope.addNewBody();
    if (response.getSoapFault() != null) {
        body.set(createSOAP12Fault(response.getSoapFault()));
    } else {
        if (response.getException() != null) {
            if (!response.getException().getExceptions().isEmpty()) {
                final CodedException firstException = response.getException().getExceptions().get(0);
                action = getExceptionActionURI(firstException.getCode());
            }
            body.set(createSOAP12FaultFromExceptionResponse(response.getException()));
            N52XmlHelper.setSchemaLocationsToDocument(envelopeDoc, Sets.newHashSet(N52XmlHelper.getSchemaLocationForSOAP12(), N52XmlHelper.getSchemaLocationForOWS110Exception()));
        } else {
            action = response.getSoapAction();
            final XmlObject bodyContent = getBodyContent(response);
            String value = null;
            Node nodeToRemove = null;
            final NamedNodeMap attributeMap = bodyContent.getDomNode().getFirstChild().getAttributes();
            for (int i = 0; i < attributeMap.getLength(); i++) {
                final Node node = attributeMap.item(i);
                if (node.getLocalName().equals(W3CConstants.AN_SCHEMA_LOCATION)) {
                    value = node.getNodeValue();
                    nodeToRemove = node;
                }
            }
            if (nodeToRemove != null) {
                attributeMap.removeNamedItem(nodeToRemove.getNodeName());
            }
            final Set<SchemaLocation> schemaLocations = Sets.newHashSet();
            schemaLocations.add(N52XmlHelper.getSchemaLocationForSOAP12());
            if (value != null && !value.isEmpty()) {
                String[] split = value.split(" ");
                for (int i = 0; i < split.length; i += 2) {
                    schemaLocations.add(new SchemaLocation(split[i], split[i + 1]));
                }
            }
            N52XmlHelper.setSchemaLocationsToDocument(envelopeDoc, schemaLocations);
            body.set(bodyContent);
        }
    }
    if (response.getHeader() != null) {
        createSOAP12Header(envelope, response.getHeader(), action);
    } else {
        envelope.addNewHeader();
    }
    // checkAndValidateSoapMessage(envelopeDoc);
    return envelopeDoc;
}
Also used : SchemaLocation(org.n52.shetland.w3c.SchemaLocation) EnvelopeDocument(org.w3.x2003.x05.soapEnvelope.EnvelopeDocument) NamedNodeMap(org.w3c.dom.NamedNodeMap) CodedException(org.n52.shetland.ogc.ows.exception.CodedException) Node(org.w3c.dom.Node) XmlObject(org.apache.xmlbeans.XmlObject) XmlString(org.apache.xmlbeans.XmlString) Envelope(org.w3.x2003.x05.soapEnvelope.Envelope) Body(org.w3.x2003.x05.soapEnvelope.Body)

Aggregations

XmlObject (org.apache.xmlbeans.XmlObject)2 Body (org.w3.x2003.x05.soapEnvelope.Body)2 Node (org.w3c.dom.Node)2 ArrayList (java.util.ArrayList)1 List (java.util.List)1 XmlException (org.apache.xmlbeans.XmlException)1 XmlString (org.apache.xmlbeans.XmlString)1 CodedException (org.n52.shetland.ogc.ows.exception.CodedException)1 SchemaLocation (org.n52.shetland.w3c.SchemaLocation)1 DecodingException (org.n52.svalbard.decode.exception.DecodingException)1 Body (org.w3._2003._05.soap_envelope.Body)1 Envelope (org.w3._2003._05.soap_envelope.Envelope)1 Header (org.w3._2003._05.soap_envelope.Header)1 Envelope (org.w3.x2003.x05.soapEnvelope.Envelope)1 EnvelopeDocument (org.w3.x2003.x05.soapEnvelope.EnvelopeDocument)1 NamedNodeMap (org.w3c.dom.NamedNodeMap)1 NodeList (org.w3c.dom.NodeList)1