Thanks for the explanation, Anne.

Does Axis 1.2 (in a SOAP 1.1 context) use the SOAP-ENV namespace (i.e. 
http://schemas.xmlsoap.org/soap/envelope/) for all faultcode values? A message in a 
recent thread here seemed to indicate that. Axis 1.1 uses SOAP-ENV for MustUnderstand 
and VersionMismatch, but uses http://xml.apache.org/axis/ for Server.*. A previous 
thread ("Verisign EPC Sandbox" by Yeo Wee Tat) showed a faultcode value of 
SOAP-ENV:Server.UserException. This indicates an extension to the SOAP-ENV namespace. 
I presume that, assuming Axis 1.2 extended this namespace, there is no XSD available 
that specifies the extension either?

Also, any idea if my description of the <detail> element below is correct? That seems 
to be what the code does, but the comment in that section of AxisFault is confusing to 
me and seems to imply something different than how I'm reading the code.

Here's the method in AxisFault that has the comment referenced above. I can't identify 
the referent of the pronoun "that" in the phrase "We now serialize exception data and 
the other side uses *that* QName to figure out what exception to use." Also don't 
understand what it means to say the Axis-specific hack is obsolete, when it's still 
reflected in the code.

-Mark Leone

private void initFromException(Exception target)
    {
        //look for old stack trace
        Element 
oldStackTrace=lookupFaultDetail(Constants.QNAME_FAULTDETAIL_STACKTRACE);
        if(oldStackTrace!=null) {
            // todo: Should we replace it or just let it be?
            return;
        }

        // Set the exception message (if any) as the fault string
        setFaultString( target.toString() );


        // Put the exception class into the AXIS SPECIFIC HACK
        //  "exceptionName" element in the details.  This allows
        // us to get back a correct Java Exception class on the other side
        // (assuming they have it available).
        // NOTE: This hack is obsolete!  We now serialize exception data
        // and the other side uses *that* QName to figure out what exception
        // to use, because the class name may be completly different on the
        // client.
        if ((target instanceof AxisFault) &&
            (target.getClass() != AxisFault.class)) {
          addFaultDetail(Constants.QNAME_FAULTDETAIL_EXCEPTIONNAME,
                    target.getClass().getName());
        }

        //add stack trace
        addFaultDetail(Constants.QNAME_FAULTDETAIL_STACKTRACE,
                JavaUtils.stackToString(target));
    }

-----Original Message-----
From: Anne Thomas Manes [mailto:[EMAIL PROTECTED]
Sent: Sunday, October 17, 2004 4:13 AM
To: [EMAIL PROTECTED]
Subject: RE: Looking for XSD for http://xml.apache.org/axis/


Axis 1.1 returns axis:Server.userException where it should return
soapenv:Client. Because these fault codes are defined in a separate
namespace, technically, this isn't a bug. But a developer should have the
choice to return the standard soapenv fault codes.

This issue has been fixed in Axis 1.2.

I'm not aware of a schema for http://xml.apache.org/axis/, but perhaps
someone else is...

Anne

-----Original Message-----
From: Leone, Mark (Mission Systems) [mailto:[EMAIL PROTECTED] 
Sent: Saturday, October 16, 2004 2:09 PM
To: [EMAIL PROTECTED]
Subject: Looking for XSD for http://xml.apache.org/axis/

I'm working on a project that is building a web services gateway that
invokes services on several independently-developed data brokers. One of
those brokers is already implemented, using Axis 1.1 with SOAP 1.1 RPC
style, while our gateway is planning on Using WebLogic. The developers of
the Axis service that we'll be invoking provided us some sample SOAP
messages, including a Fault message. This message has the faultcode as

<faultcode
xmlns:ns1="http://xml.apache.org/axis/";>ns1:Server.userException</faultcode>

In order to validate the Fault message when received at my gateway, I need
an XSD for the namespace "http://xml.apache.org/axis/";. I searched all over
the web as well as through all the Axis documentation on my computer, and I
can't find such an XSD. Are consumers of Axis services expected to
reverse-engineer the XSD from the Axis source code?

Looking through the Axis source code (org.apache.axis.AxisFault,
org.apache.axis.Constants), it seems that the QName content of <faultcode>
(in a SOAP 1.1 context) can have the following values for its local part:

Server.generalException
Server.userException
Server.NoService
MustUnderstand
VersionMismatch

Curiously, I don't see the value "Client", which the SOAP spec says the
service must return if the client submits an invalid request.

I also conclude from the source code that the fault detail element will
include:

<detail>
        <!-- the <exceptionName> element is only present if the exception
thrown was a subclass of AxisFault -->
        <exceptionName>exception name here</exceptionName>
        <ns2:stackTrace xmlns:ns2="http://xml.apache.org/axis/";>string dump
of the stack trace
        </stackTrace>
</detail>

Could someone please either

a) Point me to an XSD for namespace "http://xml.apache.org/axis/";

or

b) Confirm that the above values for <faultcode> and <detail> properly
describe what I need to specify in the XSD if I create it myself. Also, does
Axis not use the <faultcode> value "Client"?

-Mark Leone

Reply via email to