![JAR search and dependency download from the Maven repository](/logo.png)
scalut.xml.soap.SoapHelper.scala Maven / Gradle / Ivy
The newest version!
package scalut.xml.soap
import javax.xml.soap._
import org.w3c.dom.Document
import scalut.collections.CollectionHelper
import scalut.xml.soap.SoapFault.FaultCode
import scalut.xml.{DocHelper, XmlHelper}
import scala.xml.NamespaceBinding
object SoapHelper {
lazy val DEFAULT_BINDINGS = Seq(XmlHelper.XSI_NS_BINDING, XmlHelper.XSD_NS_BINDING)
/*
lazy val XSD_NS = NamespaceBinding("xsd", XMLConstants.W3C_XML_SCHEMA_NS_URI, xml.TopScope)
lazy val XSI_NS = NamespaceBinding("xsi", XMLConstants.W3C_XML_SCHEMA_INSTANCE_NS_URI, XSD_NS)
lazy val SOAP_NS = NamespaceBinding(SOAPConstants.SOAP_ENV_PREFIX, SOAPConstants.URI_NS_SOAP_1_1_ENVELOPE, XSI_NS)
lazy val SOAP_NS_12 = NamespaceBinding(SOAPConstants.SOAP_ENV_PREFIX, SOAPConstants.URI_NS_SOAP_1_2_ENVELOPE, XSI_NS)
def createXmlConverter[T](readClass: Class[T], driver: HierarchicalStreamDriver = null) = new XmlConverter[T] {
override def write(t: T, base: NodeSeq): NodeSeq = base.collectFirst {
case e: Elem => e.copy(child = e.child ++ XML.loadString(XStreamHelper.toXmlString[T](t, driver)))
}.getOrElse(XML.loadString(XStreamHelper.toXmlString[T](t, driver)))
override def read(x: NodeSeq): Option[T] = {
x.collectFirst {
case e: Elem => e.child.collectFirst {
case e: Elem => XStreamHelper.fromString(e.toString(), readClass)
}.getOrElse(null.asInstanceOf[T])
}
}
}
def toSoap[T](t: T, ns: NamespaceBinding = SOAP_NS)(implicit r: XmlWriter[T]): Elem =
soapEnvelopeWriter[T](r).write(SoapEnvelope(t)(ns), NodeSeq.Empty)
def fromSOAP[T](x: NodeSeq)(implicit r: XmlReader[T]): Option[T] =
soapEnvelopeReader[T](r).read(x) match {
case Some(SoapEnvelope(t)) => Some(t)
case None => None
}
*/
/*def getFault(message: SOAPMessage): Option[SoapFault[String]] = {
val soapBody = message.getSOAPPart.getEnvelope.getBody
if (soapBody.hasFault) {
val fault = soapBody.getFault
val faultCode = FaultCode.getByName(fault.getFaultCodeAsName.getLocalName).get
Some(SoapFault(faultCode, fault.getFaultString, fault.getFaultActor,
(fault.hasDetail && fault.hasChildNodes)
? DocHelper.toString(fault.getDetail, indent = false, omitXmlDec = true)
| null
))
} else {
None
}
}*/
def createSOAPMessage(
soapAction: String,
bodyDocument: Document,
soapProtocol: String = SOAPConstants.DEFAULT_SOAP_PROTOCOL,
envelopeNS: collection.Seq[NamespaceBinding] = DEFAULT_BINDINGS
): SOAPMessage = {
val messageFactory = MessageFactory.newInstance(soapProtocol)
val soapMessage = messageFactory.createMessage
val soapPart = soapMessage.getSOAPPart
val envelope = soapPart.getEnvelope
// envelope.addNamespaceDeclaration(nsPrefix, serverURI)
if (CollectionHelper.nonEmpty(envelopeNS)) {
envelopeNS.foreach(ns => envelope.addNamespaceDeclaration(ns.prefix, ns.uri))
}
envelope.getBody.addDocument(bodyDocument)
val headers = soapMessage.getMimeHeaders
// headers.addHeader("SOAPAction", serverURI + soapMethod)
headers.addHeader("SOAPAction", soapAction)
soapMessage.saveChanges()
soapMessage
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy