Search in sources :

Example 1 with SOAPBody

use of javax.xml.soap.SOAPBody in project camel by apache.

the class SoapTargetBean method invokeSoapMessage.

public SOAPMessage invokeSoapMessage(SOAPMessage request) {
    SOAPMessage response = null;
    try {
        SOAPBody body = request.getSOAPBody();
        Node n = body.getFirstChild();
        while (n.getNodeType() != Node.ELEMENT_NODE) {
            n = n.getNextSibling();
        }
        if (n.getLocalName().equals(sayHi.getLocalPart())) {
            response = sayHiResponse;
        } else if (n.getLocalName().equals(greetMe.getLocalPart())) {
            response = greetMeResponse;
        }
    } catch (Exception ex) {
        ex.printStackTrace();
    }
    return response;
}
Also used : SOAPBody(javax.xml.soap.SOAPBody) Node(org.w3c.dom.Node) SOAPMessage(javax.xml.soap.SOAPMessage)

Example 2 with SOAPBody

use of javax.xml.soap.SOAPBody in project openhab1-addons by openhab.

the class Tr064Comm method setTr064Value.

/***
     * Sets a parameter in fbox. Called from event bus
     *
     * @param request config string from itemconfig
     * @param cmd command to set
     */
public void setTr064Value(String request, Command cmd) {
    // extract itemCommand from request
    String[] itemConfig = request.split(":");
    // command is always first
    String itemCommand = itemConfig[0];
    // search for proper item Mapping
    ItemMap itemMap = determineItemMappingByItemCommand(itemCommand);
    // determine which url etc. to connect to for accessing required value
    Tr064Service tr064service = determineServiceByItemMapping(itemMap);
    // construct soap Body which is added to soap msg later
    // holds data to be sent to fbox
    SOAPBodyElement bodyData = null;
    try {
        MessageFactory mf = MessageFactory.newInstance();
        // empty message
        SOAPMessage msg = mf.createMessage();
        // std. SAOP body
        SOAPBody body = msg.getSOAPBody();
        // header
        QName bodyName = new QName(tr064service.getServiceType(), itemMap.getWriteServiceCommand(), "u");
        // for
        // body
        // element
        bodyData = body.addBodyElement(bodyName);
        // only if input parameter is present
        if (itemConfig.length > 1) {
            // additional parameter to set e.g. id of TAM to set
            String dataInValueAdd = itemConfig[1];
            // name of additional para to set
            QName dataNode = new QName(itemMap.getWriteDataInNameAdditional());
            SOAPElement beDataNode = bodyData.addChildElement(dataNode);
            // add value which should be set
            beDataNode.addTextNode(dataInValueAdd);
        }
        // convert String command into numeric
        String setDataInValue = cmd.toString().equalsIgnoreCase("on") ? "1" : "0";
        // service specific node name
        QName dataNode = new QName(itemMap.getWriteDataInName());
        SOAPElement beDataNode = bodyData.addChildElement(dataNode);
        // add data which should be requested from fbox for this service
        beDataNode.addTextNode(setDataInValue);
        logger.debug("SOAP Msg to send to FritzBox for setting data: {}", soapToString(msg));
    } catch (Exception e) {
        logger.error("Error constructing request SOAP msg for setting parameter. {}", e.getMessage());
        logger.debug("Request was: {}. Command was: {}.", request, cmd.toString());
    }
    if (bodyData == null) {
        logger.error("Could not determine data to be sent to FritzBox!");
        return;
    }
    // construct entire msg with body element
    SOAPMessage smTr064Request = constructTr064Msg(bodyData);
    // needed to
    String soapActionHeader = tr064service.getServiceType() + "#" + itemMap.getWriteServiceCommand();
    // be sent
    // with
    // request
    // (not in
    // body ->
    // header)
    SOAPMessage response = readSoapResponse(soapActionHeader, smTr064Request, _url + tr064service.getControlUrl());
    if (response == null) {
        logger.error("Error retrieving SOAP response from FritzBox");
        return;
    }
    logger.debug("SOAP response from FritzBox: {}", soapToString(response));
    // Check if error received
    try {
        if (response.getSOAPBody().getFault() != null) {
            logger.error("Error received from FritzBox while trying to set parameter");
            logger.debug("Soap Response was: {}", soapToString(response));
        }
    } catch (SOAPException e) {
        logger.error("Could not parse soap response from FritzBox while setting parameter. {}", e.getMessage());
        logger.debug("Soap Response was: {}", soapToString(response));
    }
}
Also used : SOAPBody(javax.xml.soap.SOAPBody) MessageFactory(javax.xml.soap.MessageFactory) QName(javax.xml.namespace.QName) SOAPException(javax.xml.soap.SOAPException) SOAPElement(javax.xml.soap.SOAPElement) SOAPMessage(javax.xml.soap.SOAPMessage) XPathExpressionException(javax.xml.xpath.XPathExpressionException) URISyntaxException(java.net.URISyntaxException) SOAPException(javax.xml.soap.SOAPException) UnsupportedEncodingException(java.io.UnsupportedEncodingException) ClientProtocolException(org.apache.http.client.ClientProtocolException) IOException(java.io.IOException) SOAPBodyElement(javax.xml.soap.SOAPBodyElement)

Example 3 with SOAPBody

use of javax.xml.soap.SOAPBody in project openhab1-addons by openhab.

the class Tr064Comm method getTr064Value.

/***
     * Fetches a specific value from FritzBox
     *
     *
     * @param request string from config including the command and optional parameters
     * @return parsed value
     */
public String getTr064Value(String request) {
    String value = null;
    // extract itemCommand from request
    String[] itemConfig = request.split(":");
    // command is always first
    String itemCommand = itemConfig[0];
    // search for proper item Mapping
    ItemMap itemMap = determineItemMappingByItemCommand(itemCommand);
    if (itemMap == null) {
        logger.warn("No item mapping found for {}. Function not implemented by your FritzBox (?)", request);
        return "";
    }
    // determine which url etc. to connect to for accessing required value
    Tr064Service tr064service = determineServiceByItemMapping(itemMap);
    // construct soap Body which is added to soap msg later
    // holds data to be sent to fbox
    SOAPBodyElement bodyData = null;
    try {
        MessageFactory mf = MessageFactory.newInstance();
        // empty message
        SOAPMessage msg = mf.createMessage();
        // std. SAOP body
        SOAPBody body = msg.getSOAPBody();
        // header
        QName bodyName = new QName(tr064service.getServiceType(), itemMap.getReadServiceCommand(), "u");
        // for body
        // element
        bodyData = body.addBodyElement(bodyName);
        // only if input parameter is present
        if (itemConfig.length > 1) {
            String dataInValue = itemConfig[1];
            // service specific node name
            QName dataNode = new QName(itemMap.getReadDataInName());
            SOAPElement beDataNode = bodyData.addChildElement(dataNode);
            // if input is mac address, replace "-" with ":" as fbox wants
            if (itemMap.getItemCommand().equals("maconline")) {
                dataInValue = dataInValue.replaceAll("-", ":");
            }
            // add data which should be requested from fbox for this service
            beDataNode.addTextNode(dataInValue);
        }
        logger.trace("Raw SOAP Request to be sent to FritzBox: {}", soapToString(msg));
    } catch (Exception e) {
        logger.error("Error constructing request SOAP msg for getting parameter. {}", e.getMessage());
        logger.debug("Request was: {}", request);
    }
    if (bodyData == null) {
        logger.error("Could not determine data to be sent to FritzBox!");
        return null;
    }
    // construct entire msg with body element
    SOAPMessage smTr064Request = constructTr064Msg(bodyData);
    // needed to be
    String soapActionHeader = tr064service.getServiceType() + "#" + itemMap.getReadServiceCommand();
    // sent with
    // request (not
    // in body ->
    // header)
    SOAPMessage response = readSoapResponse(soapActionHeader, smTr064Request, _url + tr064service.getControlUrl());
    logger.trace("Raw SOAP Response from FritzBox: {}", soapToString(response));
    if (response == null) {
        logger.error("Error retrieving SOAP response from FritzBox");
        return null;
    }
    // check if special "soap value parser" handler for extracting SOAP value is defined. If yes, use svp
    if (itemMap.getSoapValueParser() == null) {
        // extract dataOutName1 as default, no handler used
        NodeList nlDataOutNodes = response.getSOAPPart().getElementsByTagName(itemMap.getReadDataOutName());
        if (nlDataOutNodes != null && nlDataOutNodes.getLength() > 0) {
            // extract value from soap response
            value = nlDataOutNodes.item(0).getTextContent();
        } else {
            logger.error("FritzBox returned unexpected response. Could not find expected datavalue {} in response.", itemMap.getReadDataOutName());
            logger.debug(soapToString(response));
        }
    } else {
        logger.debug("Parsing response using SOAP value parser in Item map");
        // itemMap is
        value = itemMap.getSoapValueParser().parseValueFromSoapMessage(response, itemMap, request);
    // passed for
    // accessing
    // mapping in
    // anonymous
    // method
    // (better way
    // to do??)
    }
    return value;
}
Also used : SOAPBody(javax.xml.soap.SOAPBody) MessageFactory(javax.xml.soap.MessageFactory) QName(javax.xml.namespace.QName) NodeList(org.w3c.dom.NodeList) SOAPElement(javax.xml.soap.SOAPElement) SOAPMessage(javax.xml.soap.SOAPMessage) XPathExpressionException(javax.xml.xpath.XPathExpressionException) URISyntaxException(java.net.URISyntaxException) SOAPException(javax.xml.soap.SOAPException) UnsupportedEncodingException(java.io.UnsupportedEncodingException) ClientProtocolException(org.apache.http.client.ClientProtocolException) IOException(java.io.IOException) SOAPBodyElement(javax.xml.soap.SOAPBodyElement)

Example 4 with SOAPBody

use of javax.xml.soap.SOAPBody in project camel by apache.

the class TesterBean method processSOAP.

public SOAPMessage processSOAP(Exchange exchange) {
    // Since the Camel-CXF endpoint uses a list to store the parameters
    // and bean component uses the bodyAs expression to get the value
    // we'll need to deal with the parameters ourself
    SOAPMessage soapMessage = (SOAPMessage) exchange.getIn().getBody(List.class).get(0);
    if (soapMessage == null) {
        System.out.println("Incoming null message detected...");
        return createDefaultSoapMessage("Greetings from Apache Camel!!!!", "null");
    }
    try {
        SOAPPart sp = soapMessage.getSOAPPart();
        SOAPEnvelope se = sp.getEnvelope();
        SOAPBody sb = se.getBody();
        String requestText = sb.getFirstChild().getTextContent();
        System.out.println(requestText);
        return createDefaultSoapMessage("Greetings from Apache Camel!!!!", requestText);
    } catch (Exception e) {
        e.printStackTrace();
        return createDefaultSoapMessage("Greetings from Apache Camel!!!!", e.getClass().getName());
    }
}
Also used : SOAPBody(javax.xml.soap.SOAPBody) SOAPPart(javax.xml.soap.SOAPPart) SOAPEnvelope(javax.xml.soap.SOAPEnvelope) SOAPMessage(javax.xml.soap.SOAPMessage) SOAPException(javax.xml.soap.SOAPException)

Example 5 with SOAPBody

use of javax.xml.soap.SOAPBody in project camel by apache.

the class TesterBean method createDefaultSoapMessage.

public static SOAPMessage createDefaultSoapMessage(String responseMessage, String requestMessage) {
    try {
        SOAPMessage soapMessage = MessageFactory.newInstance().createMessage();
        SOAPBody body = soapMessage.getSOAPPart().getEnvelope().getBody();
        QName payloadName = new QName("http://apache.org/hello_world_soap_http/types", "greetMeResponse", "ns1");
        SOAPBodyElement payload = body.addBodyElement(payloadName);
        SOAPElement message = payload.addChildElement("responseType");
        message.addTextNode(responseMessage + " Request was  " + requestMessage);
        return soapMessage;
    } catch (SOAPException e) {
        e.printStackTrace();
        throw new RuntimeException(e);
    }
}
Also used : SOAPBody(javax.xml.soap.SOAPBody) QName(javax.xml.namespace.QName) SOAPException(javax.xml.soap.SOAPException) SOAPElement(javax.xml.soap.SOAPElement) SOAPMessage(javax.xml.soap.SOAPMessage) SOAPBodyElement(javax.xml.soap.SOAPBodyElement)

Aggregations

SOAPBody (javax.xml.soap.SOAPBody)34 SOAPMessage (javax.xml.soap.SOAPMessage)30 SOAPElement (javax.xml.soap.SOAPElement)17 SOAPException (javax.xml.soap.SOAPException)16 SOAPPart (javax.xml.soap.SOAPPart)14 MessageFactory (javax.xml.soap.MessageFactory)13 NodeList (org.w3c.dom.NodeList)12 QName (javax.xml.namespace.QName)9 SOAPEnvelope (javax.xml.soap.SOAPEnvelope)9 Element (org.w3c.dom.Element)9 StreamSource (javax.xml.transform.stream.StreamSource)8 BufferedWriter (java.io.BufferedWriter)7 InputStream (java.io.InputStream)7 OutputStreamWriter (java.io.OutputStreamWriter)7 HttpURLConnection (java.net.HttpURLConnection)7 Node (org.w3c.dom.Node)7 IOException (java.io.IOException)6 Test (org.testng.annotations.Test)6 Vector (java.util.Vector)5 SOAPHeader (javax.xml.soap.SOAPHeader)5