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 John Smith <jo...@msn.com> on 2003/06/10 16:57:27 UTC
Bug? Create Custom SOAP Fault(SAAJ spec violation)
I want to create a custom SOAP Fault filling the FaultCode,FaultString and
detail myself.
But it seems the Axis SOAPFault implementation forces me to use the
AxisFault, to create SoapFault.
which is not a clean way of doing the creation.
See the code snippet
<Snippet>
public void testquick() throws Exception {
MessageFactory msgfactory = MessageFactory.newInstance();
SOAPFactory factory = SOAPFactory.newInstance();
SOAPMessage outputmsg = msgfactory.createMessage();
String valueCode = "faultcode";
String valueString = "faultString";
SOAPFault fault =
outputmsg.getSOAPPart().getEnvelope().getBody().addFault();
fault.setFaultCode(valueCode);
fault.setFaultString(valueString);
Detail d;
d = fault.addDetail();
d.addDetailEntry(factory.createName("Hello"));
if (outputmsg != null) {
if (outputmsg.saveRequired()) {
outputmsg.saveChanges();
}
outputmsg.writeTo(System.out);
}
}
</Snippet>
<output>
.<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<soapenv:Fault>
<faultcode>soapenv:faultcode</faultcode>
<faultstring>faultString</faultstring>
<faultactor></faultactor>
<detail/> <-------------------------------Detail Missing. , added a
Hello element.
</soapenv:Fault>
</soapenv:Body>
</soapenv:Envelope>
</output>
I think this is because of the serialization code, which only uses
AxisFault.
No reference to current detail
<codesnippet>
public void outputImpl(SerializationContext context)
throws IOException
{
SOAPConstants soapConstants = context.getMessageContext() == null ?
SOAPConstants.SOAP11_CONSTANTS :
context.getMessageContext().getSOAPConstants();
namespaceURI = soapConstants.getEnvelopeURI();
name = Constants.ELEM_FAULT;
context.registerPrefixForURI(prefix,
soapConstants.getEnvelopeURI());
context.startElement(new QName(this.getNamespaceURI(),
this.getName()),
attributes);
// XXX - Can fault be anything but an AxisFault here?
if (fault instanceof AxisFault) {
</codesnippet>
Is it a Bug and violation of SAAJ Spec.
saurabh arora
_________________________________________________________________
It's magic. It's a whole new world.
http://server1.msn.co.in/sp03/hclbeanstalktour/amazing_winxp.html It's the
Windows XP experience.
Re: Bug? Create Custom SOAP Fault(SAAJ spec violation)
Posted by Davanum Srinivas <di...@yahoo.com>.
Looks like a bug, Please log a bug report http://nagoya.apache.org/bugzilla/
Thanks,
dims
--- John Smith <jo...@msn.com> wrote:
>
> I want to create a custom SOAP Fault filling the FaultCode,FaultString and
> detail myself.
> But it seems the Axis SOAPFault implementation forces me to use the
> AxisFault, to create SoapFault.
> which is not a clean way of doing the creation.
>
> See the code snippet
>
> <Snippet>
> public void testquick() throws Exception {
> MessageFactory msgfactory = MessageFactory.newInstance();
> SOAPFactory factory = SOAPFactory.newInstance();
>
> SOAPMessage outputmsg = msgfactory.createMessage();
> String valueCode = "faultcode";
> String valueString = "faultString";
>
> SOAPFault fault =
> outputmsg.getSOAPPart().getEnvelope().getBody().addFault();
> fault.setFaultCode(valueCode);
> fault.setFaultString(valueString);
>
>
> Detail d;
>
> d = fault.addDetail();
>
> d.addDetailEntry(factory.createName("Hello"));
>
> if (outputmsg != null) {
> if (outputmsg.saveRequired()) {
> outputmsg.saveChanges();
> }
> outputmsg.writeTo(System.out);
> }
> }
> </Snippet>
>
> <output>
> .<?xml version="1.0" encoding="UTF-8"?>
> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
> xmlns:xsd="http://www.w3.org/2001/XMLSchema"
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
> <soapenv:Body>
> <soapenv:Fault>
> <faultcode>soapenv:faultcode</faultcode>
> <faultstring>faultString</faultstring>
> <faultactor></faultactor>
> <detail/> <-------------------------------Detail Missing. , added a
> Hello element.
> </soapenv:Fault>
> </soapenv:Body>
> </soapenv:Envelope>
> </output>
>
> I think this is because of the serialization code, which only uses
> AxisFault.
> No reference to current detail
>
> <codesnippet>
> public void outputImpl(SerializationContext context)
> throws IOException
> {
> SOAPConstants soapConstants = context.getMessageContext() == null ?
> SOAPConstants.SOAP11_CONSTANTS :
>
> context.getMessageContext().getSOAPConstants();
>
> namespaceURI = soapConstants.getEnvelopeURI();
> name = Constants.ELEM_FAULT;
>
> context.registerPrefixForURI(prefix,
> soapConstants.getEnvelopeURI());
> context.startElement(new QName(this.getNamespaceURI(),
> this.getName()),
> attributes);
>
> // XXX - Can fault be anything but an AxisFault here?
> if (fault instanceof AxisFault) {
>
> </codesnippet>
>
> Is it a Bug and violation of SAAJ Spec.
>
> saurabh arora
>
> _________________________________________________________________
> It's magic. It's a whole new world.
> http://server1.msn.co.in/sp03/hclbeanstalktour/amazing_winxp.html It's the
> Windows XP experience.
>
=====
Davanum Srinivas - http://webservices.apache.org/~dims/
__________________________________
Do you Yahoo!?
Yahoo! Calendar - Free online calendar with sync to Outlook(TM).
http://calendar.yahoo.com