I'll try and help, though I'm not a fan of faults. Typically I use
error codes and put the stack trace as a string. That's reflected in
the following WSDL, which also for demonstration defines a fault:

<?xml version="1.0" encoding="UTF-8"?>

<definitions name="SimpleService" targetNamespace="http://simpleNS";
xmlns:tns="http://simpleNS"; xmlns="http://schemas.xmlsoap.org/wsdl/";
xmlns:xsd="http://www.w3.org/2001/XMLSchema";
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/";
xmlns:ns2="http://simpleNS/types";
xmlns:customfault="http://www.example.com/wsdl/2006-06-13/customfault";>

 <types>
   <schema targetNamespace="http://simpleNS/types";
xmlns:tns="http://simpleNS/types";
xmlns:soap11-enc="http://schemas.xmlsoap.org/soap/encoding/";
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/";
xmlns="http://www.w3.org/2001/XMLSchema";>
     <import namespace="http://schemas.xmlsoap.org/soap/encoding/"/>
     <element name="simpleLogin">
       <complexType>
         <sequence>
           <element name="user_name" type="xsd:string"/>
           <element name="user_password" type="xsd:string"/>
         </sequence>
       </complexType>
     </element>
     <element name="simpleLoginResponse">
       <complexType>
         <sequence>
           <element name="soap_session_id" type="xsd:string"/>
           <element name="web_user_name" type="xsd:string"/>
         </sequence>
       </complexType>
     </element>
     <element name="myFault" type="xsd:string"/>
   </schema>
 </types>
 <message name="SimpleEndpoint_simpleLogin">
    <part name="parameters" element="ns2:simpleLogin"/>
 </message>
 <message name="SimpleEndpoint_simpleLoginResponse">
   <part name="result" element="ns2:simpleLoginResponse"/>
 </message>
 <message name="MyFault">
    <part name="faultDetail" element="ns2:myFault"/>
 </message>
 <portType name="SimpleEndpoint">
   <operation name="simpleLogin">
     <input message="tns:SimpleEndpoint_simpleLogin"
name="SimpleEndpoint_simpleLogin"/>
     <output message="tns:SimpleEndpoint_simpleLoginResponse"
name="SimpleEndpoint_simpleLoginResponse"/>
     <fault name="MyFault" message="tns:MyFault"/>
   </operation>
 </portType>
 <binding name="SimpleEndpointBinding" type="tns:SimpleEndpoint">
   <soap:binding transport="http://schemas.xmlsoap.org/soap/http";
style="document"/>
   <operation name="simpleLogin">
     <soap:operation soapAction="simpleLogin"/>
     <input name="SimpleEndpoint_simpleLogin">
       <soap:body use="literal"/>
     </input>
     <output name="SimpleEndpoint_simpleLoginResponse">
       <soap:body use="literal"/>
     </output>
     <fault name="MyFault">
          <soap:fault name="MyFault" use="literal"/>
     </fault>
   </operation>
 </binding>
 <service name="SimpleService">
   <port name="SimpleEndpointPort" binding="tns:SimpleEndpointBinding">
     <soap:address
location="http://localhost:8080/axis2/services/SimpleService"/></port></service></definitions>


Using xmlbeans, that results in:

**
    * SimpleServiceSkeleton.java
    *
    * This file was auto-generated from WSDL
    * by the Apache Axis2 version: SNAPSHOT Jun 20, 2006 (11:24:21 GMT+00:00)
    */
   package org.simple.endpoint;
   /**
    *  SimpleServiceSkeleton java skeleton for the axisService
    */
   public class SimpleServiceSkeleton{


       /**
        * Auto generated method signature

         * @param param0

        */
       public  simplens.types.SimpleLoginResponseDocument simpleLogin
                 (simplens.types.SimpleLoginDocument param0 )

          throws org.simple.endpoint.SimpleServiceSkeleton.MyFaultException{
               //Todo fill this with the necessary business logic
               throw new  java.lang.UnsupportedOperationException();
       }

        public static class MyFaultException extends java.rmi.RemoteException{

           private simplens.types.MyFaultDocument faultMessage;

           public void setFaultMessage(simplens.types.MyFaultDocument msg){
              faultMessage = msg;
           }

           public simplens.types.MyFaultDocument getFaultMessage(){
              return faultMessage;
           }
        }

   }

The way I would normally handle exceptions would be a slight change to
the wsdl:

<complexType name="ReturnWebBase">
       <sequence>
         <element name="errorMessage" type="xsd:string"/>
         <element name="successErrorCode" type="xsd:int"/>
       </sequence>
     </complexType>

<element name="simpleLoginResponse">
       <complexType>
         <complexContent>
           <extension base="tns:ReturnWebBase">
             <sequence>
               <element name="soap_session_id" type="xsd:string"/>
               <element name="web_user_name" type="xsd:string"/>
             </sequence>
           </extension>
         </complexContent>
       </complexType>
     </element>

try {
  ...
} catch (Exception ex) {
           retElement.setErrorMessage(ex.getMessage());
           retElement.setSuccessErrorCode(MessagesCodes.FAILURE);
       }

HTH,
Robert
http://www.braziloutsource.com/

On 6/21/06, [EMAIL PROTECTED] <[EMAIL PROTECTED]> wrote:
Sorry for bringing this up again, but nobody answered.
Any hints ?

> Hi,
>
> I have a service implementation, that is NOT generated by WSDL2Java. It is 
just simple Java-classes.
> There I have some methods, that can throw my own UserExceptions.
>
> To put some helpful response back to the client, I manually create my 
SOAPFaults and put them on the incoming MessageContext, then throwing an 
AxisFault. Chinthaka was so kind to describe that on:
> http://www.wso2.net/kb/171
>
> So shortly, how it looks like:
>
> ------ Service imlementation ------
> ....
>
> public OMElement myMethod(OMElement input) throws AxisFault {
>    try {
>        // do what the service should do
>        throw new MyUserException("message", originalException);
>    }
>    catch ( (Exception e) {
>       // build the SOAPFault with all the details
>       // put it on the MC
>       // throw new AxisFault("some errortext");
>   }
> }
>
> --------- MYUserExcption -----------
> public class MyUserException extends RemoteException {
>
>               public MyUserException(String message, Throwable ex){
>                       super(message, ex);
>               }
> }
>
>
> I suggest, if I generate a WSDL-File from this code, there would not appear 
MyUserException in a faultmessage.
> I have to admit, I haven't tried it so far.
> My questions:
> - Is this the right way to use UserExceptions?
> - How can I achieve the Userexceptions been represented in the WSDL-file?
>
> Maybe someone could provide an example?!
>
> Thanks in advance for your time
>
> Bille
>


______________________________________________________________
Verschicken Sie romantische, coole und witzige Bilder per SMS!
Jetzt bei WEB.DE FreeMail: http://f.web.de/?mc=021193


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to