use of com.sun.xml.stream.buffer.XMLStreamBufferSource in project metro-jax-ws by eclipse-ee4j.
the class StreamHeader method writeTo.
public void writeTo(SOAPMessage saaj) throws SOAPException {
try {
// TODO what about in-scope namespaces
// Not very efficient consider implementing a stream buffer
// processor that produces a DOM node from the buffer.
TransformerFactory tf = XmlUtil.newTransformerFactory(true);
Transformer t = tf.newTransformer();
XMLStreamBufferSource source = new XMLStreamBufferSource(_mark);
DOMResult result = new DOMResult();
t.transform(source, result);
Node d = result.getNode();
if (d.getNodeType() == Node.DOCUMENT_NODE)
d = d.getFirstChild();
SOAPHeader header = saaj.getSOAPHeader();
if (header == null)
header = saaj.getSOAPPart().getEnvelope().addHeader();
Node node = header.getOwnerDocument().importNode(d, true);
header.appendChild(node);
} catch (Exception e) {
throw new SOAPException(e);
}
}
use of com.sun.xml.stream.buffer.XMLStreamBufferSource in project metro-jax-ws by eclipse-ee4j.
the class EndpointReferenceUtil method toW3CEpr.
// TODO: bit of redundency on writes of w3c epr, should modularize it
private static W3CEndpointReference toW3CEpr(MemberSubmissionEndpointReference msEpr) {
StreamWriterBufferCreator writer = new StreamWriterBufferCreator();
w3cMetadataWritten = false;
try {
writer.writeStartDocument();
writer.writeStartElement(AddressingVersion.W3C.getPrefix(), "EndpointReference", AddressingVersion.W3C.nsUri);
writer.writeNamespace(AddressingVersion.W3C.getPrefix(), AddressingVersion.W3C.nsUri);
// write wsa:Address
writer.writeStartElement(AddressingVersion.W3C.getPrefix(), AddressingVersion.W3C.eprType.address, AddressingVersion.W3C.nsUri);
writer.writeCharacters(msEpr.addr.uri);
writer.writeEndElement();
// TODO: write extension attributes on wsa:Address
if ((msEpr.referenceProperties != null && msEpr.referenceProperties.elements.size() > 0) || (msEpr.referenceParameters != null && msEpr.referenceParameters.elements.size() > 0)) {
writer.writeStartElement(AddressingVersion.W3C.getPrefix(), "ReferenceParameters", AddressingVersion.W3C.nsUri);
// write ReferenceProperties
if (msEpr.referenceProperties != null) {
for (Element e : msEpr.referenceProperties.elements) {
DOMUtil.serializeNode(e, writer);
}
}
// write referenceParameters
if (msEpr.referenceParameters != null) {
for (Element e : msEpr.referenceParameters.elements) {
DOMUtil.serializeNode(e, writer);
}
}
writer.writeEndElement();
}
// Supress writing ServiceName and EndpointName in W3CEPR,
// Until the ns for those metadata elements is resolved.
/*
//Write Interface info
if (msEpr.portTypeName != null) {
writeW3CMetadata(writer);
writer.writeStartElement(AddressingVersion.W3C.getWsdlPrefix(),
AddressingVersion.W3C.eprType.portTypeName ,
AddressingVersion.W3C.wsdlNsUri);
writer.writeNamespace(AddressingVersion.W3C.getWsdlPrefix(),
AddressingVersion.W3C.wsdlNsUri);
String portTypePrefix = fixNull(msEpr.portTypeName.name.getPrefix());
writer.writeNamespace(portTypePrefix, msEpr.portTypeName.name.getNamespaceURI());
if (portTypePrefix.equals(""))
writer.writeCharacters(msEpr.portTypeName.name.getLocalPart());
else
writer.writeCharacters(portTypePrefix + ":" + msEpr.portTypeName.name.getLocalPart());
writer.writeEndElement();
}
if (msEpr.serviceName != null) {
writeW3CMetadata(writer);
//Write service and Port info
writer.writeStartElement(AddressingVersion.W3C.getWsdlPrefix(),
AddressingVersion.W3C.eprType.serviceName ,
AddressingVersion.W3C.wsdlNsUri);
writer.writeNamespace(AddressingVersion.W3C.getWsdlPrefix(),
AddressingVersion.W3C.wsdlNsUri);
String servicePrefix = fixNull(msEpr.serviceName.name.getPrefix());
if (msEpr.serviceName.portName != null)
writer.writeAttribute(AddressingVersion.W3C.eprType.portName,
msEpr.serviceName.portName);
writer.writeNamespace(servicePrefix, msEpr.serviceName.name.getNamespaceURI());
if (servicePrefix.length() > 0)
writer.writeCharacters(servicePrefix + ":" + msEpr.serviceName.name.getLocalPart());
else
writer.writeCharacters(msEpr.serviceName.name.getLocalPart());
writer.writeEndElement();
}
*/
// TODO: revisit this
Element wsdlElement = null;
// Check for wsdl in extension elements
if ((msEpr.elements != null) && (msEpr.elements.size() > 0)) {
for (Element e : msEpr.elements) {
if (e.getNamespaceURI().equals(MemberSubmissionAddressingConstants.MEX_METADATA.getNamespaceURI()) && e.getLocalName().equals(MemberSubmissionAddressingConstants.MEX_METADATA.getLocalPart())) {
NodeList nl = e.getElementsByTagNameNS(WSDLConstants.NS_WSDL, WSDLConstants.QNAME_DEFINITIONS.getLocalPart());
if (nl != null) {
wsdlElement = (Element) nl.item(0);
}
}
}
}
// write WSDL
if (wsdlElement != null) {
DOMUtil.serializeNode(wsdlElement, writer);
}
if (w3cMetadataWritten) {
writer.writeEndElement();
}
// write extension elements
if ((msEpr.elements != null) && (msEpr.elements.size() > 0)) {
for (Element e : msEpr.elements) {
if (e.getNamespaceURI().equals(WSDLConstants.NS_WSDL) && e.getLocalName().equals(WSDLConstants.QNAME_DEFINITIONS.getLocalPart())) {
// Don't write it as this is written already in Metadata
}
DOMUtil.serializeNode(e, writer);
}
}
// TODO:write extension attributes
// </EndpointReference>
writer.writeEndElement();
writer.writeEndDocument();
writer.flush();
} catch (XMLStreamException e) {
throw new WebServiceException(e);
}
return new W3CEndpointReference(new XMLStreamBufferSource(writer.getXMLStreamBuffer()));
}
Aggregations