You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-user@axis.apache.org by al...@alice.it on 2009/08/05 12:01:04 UTC
set body message with xml file content
Hi ,
I'm not able to set body of soap message with a xml file content previously saved !!
I must save body content to re-send,in fault case ... Can I set body message, directly, without use setXxxx method of object ?
HEEEEEEELLLLP.... .
Thank in advance !!
Alex
==================
code used to get body serialized (xml) from message.
ConfirmOpResponse confirm = new ConfirmOpResponse ();
confirm.setCodiceEsito(new CodiceEsito_type1(esito, true));
DescrizioneEsito_type1 descr = new DescrizioneEsito_type1();
descr.setDescrizioneEsito_type0(descrizione);
confirm.setDescrizioneEsito(descr);
try {
OMElement confOp = confirm.getOMElement(ConfirmOpResponse .MY_QNAME, OMAbstractFactory.getOMFactory());
serializedObj= confOp.toString();
System.out.println(serializedObj); ---- print xml
} catch (ADBException e) {
e.printStackTrace();
}
RE: set body message with xml file content
Posted by Martin Gainty <mg...@hotmail.com>.
implement XMLWriter e.g. look at this example for XMLStreamReader
org.apache.axis2.jibx.JibxDataSource
public XMLStreamReader getReader() throws XMLStreamException {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
serialize(bos, null);
return StAXUtils.createXMLStreamReader(new ByteArrayInputStream(bos.toByteArray()));
}
//the cast from bos to XML happens here
public void serialize(XMLStreamWriter xmlWriter) throws XMLStreamException {
try {
//get the ctx
IMarshallingContext ctx = bindingFactory.createMarshallingContext();
//get the response from supplied ctx
HttpServletResponse res = (HttpServletResponse)ctx
.getProperty(HTTPConstants.MC_HTTP_SERVLETRESPONSE);
//assume the writer is the outputStream from Response
OutputStream writer=response.getOutputStream();
boolean full=false;
// marshal with all namespace declarations, since external state unknown
String[] nss = bindingFactory.getNamespaces();
IXMLWriter writer = new StAXWriter(nss, xmlWriter);
//set output writer for context
ctx.setXmlWriter(writer);
marshal(full, ctx);
..
}
private void marshal(boolean full, IMarshallingContext ctx) throws JiBXException {
try {
//get the XMLWriter from ctx
IXMLWriter wrtr = ctx.getXmlWriter();
String name = elementName;
int nsidx = 0;
//all namespaces?
if (full)
{
// declare all namespaces on start tag
nsidx = elementNamespaceIndex;
wrtr.startTagNamespaces(nsidx, name, openNamespaceIndexes, openNamespacePrefixes);
}
else
{ //get individual namespace
// configure writer with namespace declared in enclosing scope
wrtr.openNamespaces(openNamespaceIndexes, openNamespacePrefixes);
if (!"".equals(elementNamespacePrefix)) {
name = elementNamespacePrefix + ':' + name;
}
//only 1 so write at 0th position
wrtr.startTagOpen(0, name);
}
IMarshaller mrsh = ctx.getMarshaller(marshallerName);
// marshal object representation (may include attributes) into element
mrsh.marshal(dataObject, ctx);
wrtr.endTag(nsidx, name);
}
//at this point the data is there
ctx.getXmlWriter().flush();
} catch (IOException e)
{
throw new JiBXException("Error marshalling XML representation: " + e.getMessage(), e);
}
}
but the client is not guaranteed to be able to parse either BOS or XML without knowing the expected datatype you may want to consider receiving a ByteStream in your xsd e.g.
<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:ns1="http://org.apache.axis2/xsd" xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" xmlns:ns="http://tempuri.org" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" targetNamespace="http://tempuri.org">
<wsdl:types>
<xs:schema attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://tempuri.org">
...........
<xs:element name="retByteArrayResponse">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="return" nillable="true" type="xs:base64Binary"/>
</xs:sequence>
</xs:complexType>
</xs:element>
...............
</xs:schema>
<wsdl:message name="retByteArrayResponse">
<wsdl:part name="parameters" element="ns:retByteArrayResponse"/>
</wsdl:message>
...
</wsdl:types>
ciao
Martin
______________________________________________
Verzicht und Vertraulichkeitanmerkung
Diese Nachricht ist vertraulich. Sollten Sie nicht der vorgesehene Empfaenger sein, so bitten wir hoeflich um eine Mitteilung. Jede unbefugte Weiterleitung oder Fertigung einer Kopie ist unzulaessig. Diese Nachricht dient lediglich dem Austausch von Informationen und entfaltet keine rechtliche Bindungswirkung. Aufgrund der leichten Manipulierbarkeit von E-Mails koennen wir keine Haftung fuer den Inhalt uebernehmen.
Subject: set body message with xml file content
Date: Wed, 5 Aug 2009 12:01:04 +0200
From: alexaprilia@alice.it
To: axis-user@ws.apache.org
Hi ,
I'm not able to set body of soap message with a xml file content previously saved !!
I must save body content to re-send,in fault case ... Can I set body message, directly, without use setXxxx method of object ?
HEEEEEEELLLLP.... .
Thank in advance !!
Alex
==================
code used to get body serialized (xml) from message.
ConfirmOpResponse confirm = new ConfirmOpResponse ();
confirm.setCodiceEsito(new CodiceEsito_type1(esito, true));
DescrizioneEsito_type1 descr = new DescrizioneEsito_type1();
descr.setDescrizioneEsito_type0(descrizione);
confirm.setDescrizioneEsito(descr);
try {
OMElement confOp = confirm.getOMElement(ConfirmOpResponse .MY_QNAME, OMAbstractFactory.getOMFactory());
serializedObj= confOp.toString();
System.out.println(serializedObj); ---- print xml
} catch (ADBException e) {
e.printStackTrace();
}
_________________________________________________________________
Get your vacation photos on your phone!
http://windowsliveformobile.com/en-us/photos/default.aspx?&OCID=0809TL-HM