use of javax.xml.soap.SOAPBody in project openhab1-addons by openhab.
the class Tr064Comm method constructTr064Msg.
/***
* sets all required namespaces and prepares the SOAP message to send
* creates skeleton + body data
*
* @param bodyData is attached to skeleton to form entire SOAP message
* @return ready to send SOAP message
*/
private SOAPMessage constructTr064Msg(SOAPBodyElement bodyData) {
SOAPMessage soapMsg = null;
try {
MessageFactory msgFac;
msgFac = MessageFactory.newInstance();
soapMsg = msgFac.createMessage();
soapMsg.setProperty(SOAPMessage.WRITE_XML_DECLARATION, "true");
soapMsg.setProperty(SOAPMessage.CHARACTER_SET_ENCODING, "UTF-8");
SOAPPart part = soapMsg.getSOAPPart();
// valid for entire SOAP msg
String namespace = "s";
// create suitable fbox envelope
SOAPEnvelope envelope = part.getEnvelope();
envelope.setPrefix(namespace);
// delete standard namespace which was already set
envelope.removeNamespaceDeclaration("SOAP-ENV");
envelope.addNamespaceDeclaration(namespace, "http://schemas.xmlsoap.org/soap/envelope/");
Name nEncoding = envelope.createName("encodingStyle", namespace, "http://schemas.xmlsoap.org/soap/encoding/");
envelope.addAttribute(nEncoding, "http://schemas.xmlsoap.org/soap/encoding/");
// create empty header
SOAPHeader header = envelope.getHeader();
header.setPrefix(namespace);
// create body with command based on parameter
SOAPBody body = envelope.getBody();
body.setPrefix(namespace);
// bodyData already prepared. Needs only be added
body.addChildElement(bodyData);
} catch (Exception e) {
logger.error("Error creating SOAP message for fbox request with data {}", bodyData);
e.printStackTrace();
}
return soapMsg;
}
use of javax.xml.soap.SOAPBody in project OpenAM by OpenRock.
the class MessageProcessor method signMessage.
/**
* Signs the message.
* @param soapMessage SOAPMessage that needs to be signed.
* @param profile Security profile that needs to be used for signing.
* @param assertion Security Assertion
* @return SOAPMessage signed SOAPMessage.
*/
private SOAPMessage signMessage(SOAPMessage soapMessage, String profile, SecurityAssertion assertion) throws SOAPBindingException {
try {
SOAPHeader soapHeader = soapMessage.getSOAPPart().getEnvelope().getHeader();
if (soapHeader == null) {
soapMessage.getSOAPPart().getEnvelope().addHeader();
}
SOAPBody soapBody = soapMessage.getSOAPPart().getEnvelope().getBody();
if (soapBody == null) {
throw new SOAPBindingException(Utils.bundle.getString("nullSOAPBody"));
}
String bodyId = SAMLUtils.generateID();
soapBody.setAttributeNS(WSSEConstants.NS_WSU_WSF11, WSSEConstants.WSU_ID, bodyId);
List ids = new ArrayList();
ids.add(bodyId);
if (correlationId != null) {
ids.add(correlationId);
}
Certificate cert = null;
Element sigElem = null;
ByteArrayInputStream bin = null;
ByteArrayOutputStream bop = new ByteArrayOutputStream();
Document doc = null;
if (profile == null || profile.equals(Message.NULL_X509) || profile.equals(Message.TLS_X509) || profile.equals(Message.CLIENT_TLS_X509) || profile.equals(Message.NULL_X509_WSF11) || profile.equals(Message.TLS_X509_WSF11) || profile.equals(Message.CLIENT_TLS_X509_WSF11)) {
BinarySecurityToken binaryToken = addBinaryToken(soapMessage);
cert = SecurityUtils.getCertificate(binaryToken);
soapMessage.writeTo(bop);
bin = new ByteArrayInputStream(bop.toByteArray());
doc = XMLUtils.toDOMDocument(bin, Utils.debug);
sigElem = SecurityUtils.getSignatureManager().signWithWSSX509TokenProfile(doc, cert, "", ids, SOAPBindingConstants.WSF_11_VERSION);
} else if (profile.equals(Message.NULL_SAML) || profile.equals(Message.TLS_SAML) || profile.equals(Message.CLIENT_TLS_SAML) || profile.equals(Message.NULL_SAML_WSF11) || profile.equals(Message.TLS_SAML_WSF11) || profile.equals(Message.CLIENT_TLS_SAML_WSF11)) {
cert = SecurityUtils.getCertificate(assertion);
soapMessage.writeTo(bop);
new ByteArrayInputStream(bop.toByteArray());
bin = new ByteArrayInputStream(bop.toByteArray());
doc = XMLUtils.toDOMDocument(bin, Utils.debug);
sigElem = SecurityUtils.getSignatureManager().signWithWSSSAMLTokenProfile(doc, cert, assertion.getAssertionID(), "", ids, SOAPBindingConstants.WSF_11_VERSION);
}
if (sigElem == null) {
Utils.debug.error("MessageProcessor.signMessage: " + "SigElement is null");
throw new SOAPBindingException(Utils.bundle.getString("cannotSignMessage"));
}
Element securityHeader = getSecurityHeader(soapMessage);
securityHeader.appendChild(securityHeader.getOwnerDocument().importNode(sigElem, true));
return Utils.DocumentToSOAPMessage(sigElem.getOwnerDocument());
} catch (Exception ex) {
Utils.debug.error("MessageProcessor.signMessage: " + "Signing failed.", ex);
throw new SOAPBindingException(Utils.bundle.getString("cannotSignMessage"));
}
}
use of javax.xml.soap.SOAPBody in project OpenAM by OpenRock.
the class SAMLSOAPReceiver method FormSOAPError.
/**
* This method forms a SOAP Fault and puts it in the SOAP Message's
* Body.
*/
private SOAPMessage FormSOAPError(HttpServletResponse resp, String faultCode, String faultString, String detail) {
SOAPMessage msg = null;
SOAPEnvelope envelope = null;
SOAPFault sf = null;
SOAPBody body = null;
SOAPElement se = null;
try {
msg = msgFactory.createMessage();
envelope = msg.getSOAPPart().getEnvelope();
body = envelope.getBody();
sf = body.addFault();
Name qName = envelope.createName(faultCode, null, SOAPConstants.URI_NS_SOAP_ENVELOPE);
sf.setFaultCode(qName);
sf.setFaultString(SAMLUtils.bundle.getString(faultString));
if ((detail != null) && !(detail.length() == 0)) {
Detail det = sf.addDetail();
se = (SOAPElement) det.addDetailEntry(envelope.createName("Problem"));
se.addAttribute(envelope.createName("details"), SAMLUtils.bundle.getString(detail));
}
} catch (SOAPException e) {
SAMLUtils.debug.error("FormSOAPError:", e);
String[] data = { SAMLUtils.bundle.getString("soapFaultError") };
LogUtils.error(java.util.logging.Level.INFO, LogUtils.SOAP_FAULT_ERROR, data);
resp.setStatus(resp.SC_INTERNAL_SERVER_ERROR);
}
return msg;
}
use of javax.xml.soap.SOAPBody in project OpenAM by OpenRock.
the class SAMLSOAPReceiver method containsFault.
/**
* containsFault is a utiltiy method to see if msg contains a soapfault.
*/
private boolean containsFault(SOAPMessage msg) {
try {
SOAPPart sp = msg.getSOAPPart();
SOAPEnvelope se = sp.getEnvelope();
SOAPBody sb = se.getBody();
return (sb.hasFault());
} catch (Exception e) {
if (SAMLUtils.debug.messageEnabled()) {
SAMLUtils.debug.message("Error in containFault!");
}
return false;
}
}
use of javax.xml.soap.SOAPBody in project OpenAM by OpenRock.
the class FSSOAPService method formSOAPError.
/**
* Forms a SOAP Fault and puts it in the SOAP Message's Body.
*
* @param faultcode fault code to be set in SOAPMEssage
* @param faultString fault string
* @param detail the details of the fault condition
* @return <code>SOAPMessage</code> containing the SOAP fault
*/
public SOAPMessage formSOAPError(String faultcode, String faultString, String detail) {
SOAPMessage msg = null;
SOAPEnvelope envelope = null;
SOAPFault sf = null;
SOAPBody body = null;
SOAPElement se = null;
try {
msg = fac.createMessage();
envelope = msg.getSOAPPart().getEnvelope();
body = envelope.getBody();
sf = body.addFault();
Name qname = envelope.createName(faultcode, null, IFSConstants.SOAP_URI);
sf.setFaultCode(qname);
sf.setFaultString(FSUtils.bundle.getString(faultString));
if ((detail != null) && !(detail.length() == 0)) {
Detail det = sf.addDetail();
se = (SOAPElement) det.addDetailEntry(envelope.createName("Problem"));
se.addAttribute(envelope.createName("details"), FSUtils.bundle.getString(detail));
}
} catch (SOAPException e) {
FSUtils.debug.error("FSSOAPService.formSOAPError:", e);
return null;
}
return msg;
}
Aggregations