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