use of javax.xml.soap.SOAPBodyElement 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));
}
}
use of javax.xml.soap.SOAPBodyElement 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;
}
use of javax.xml.soap.SOAPBodyElement 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);
}
}
use of javax.xml.soap.SOAPBodyElement in project jbossws-cxf by jbossws.
the class AuthorizationHandler method handleInbound.
@Override
protected boolean handleInbound(SOAPMessageContext msgContext) {
log.info("handleInbound");
try {
SOAPMessage soapMessage = msgContext.getMessage();
SOAPBody soapBody = soapMessage.getSOAPBody();
SOAPBodyElement soapBodyElement = (SOAPBodyElement) soapBody.getChildElements().next();
SOAPElement soapElement = (SOAPElement) soapBodyElement.getChildElements().next();
String value = soapElement.getValue();
soapElement.setValue(value + "|AuthIn");
} catch (SOAPException e) {
throw new WebServiceException(e);
}
return true;
}
use of javax.xml.soap.SOAPBodyElement in project jbossws-cxf by jbossws.
the class AuthorizationHandler method handleOutbound.
@Override
protected boolean handleOutbound(SOAPMessageContext msgContext) {
log.info("handleOutbound");
try {
SOAPMessage soapMessage = msgContext.getMessage();
SOAPBody soapBody = soapMessage.getSOAPBody();
SOAPBodyElement soapBodyElement = (SOAPBodyElement) soapBody.getChildElements().next();
SOAPElement soapElement = (SOAPElement) soapBodyElement.getChildElements().next();
String value = soapElement.getValue();
soapElement.setValue(value + "|AuthOut");
} catch (SOAPException e) {
throw new WebServiceException(e);
}
return true;
}
Aggregations