UserException -> AxisFault is not put in details to the SOAP-response ++ Davanum advised me to open an issue ------------------------------------------------------------------------------------------------------------
Key: AXIS2-801 URL: http://issues.apache.org/jira/browse/AXIS2-801 Project: Apache Axis 2.0 (Axis2) Type: Bug Components: transports Versions: 1.0 Environment: WinXP Prof, JDK 1.4.2_09,Tomcat 5.0.28, Reporter: Bille Service works fine in normal use. I did not use code-generation with WSDL; I created it manually. When one parameter for the service is not usable, the service should throw a KIDnotFoundException, which then should be transported with all its details as a SOAPFault in the response to the client. ------------------------- my UserException ----------------- import java.rmi.RemoteException; public class KIDnotFoundException extends RemoteException { public KIDnotFoundException(String message, Throwable ex){ super(message, ex); } } ------------------------- my service implementation ----------------- import de.eonis.bd.ws.util.*; import java.util.*; import java.util.logging.Logger; import javax.naming.NamingEnumeration; // JDK import javax.naming.NamingException; import javax.naming.directory.*; import javax.xml.namespace.QName; // aus stax-api-1.0.jar import org.apache.axiom.om.*; // aus axiom-api-1.0.jar import org.apache.axiom.soap.*; import org.apache.axis2.AxisFault; import org.apache.axis2.context.*; import org.apache.axis2.context.*; import org.apache.axis2.wsdl.WSDLConstants; public class LDAPQueryService { private LDAPQuery ldapQuery = null; private MessageContext inMsgCtx = null; private MessageContext outMsgCtx = null; // Konstanten fuer die Market-Units (MU) public static final String MU_EAG = "eonag"; public static final String MU_EEA = "eea"; public static final String MU_ERG = "ruhrgas"; public static final String MU_NOR = "eno"; public static final String MU_UK = "eonuk"; public static final String MU_US = "lgee"; public static final String MU_ALL = "global"; // lasse ich init(param in) und setOperationConext drin erhalte ich den Fehler beim Starten des Tomcat /** * - Error in schema generating Sorry we don't support methods overloading !!!! java.lang.Exception: Sorry we don't support methods overloading !!!! at org.apache.ws.java2wsdl.SchemaGenerator.generateSchema(SchemaGenerator.java:143) at org.apache.axis2.deployment.util.Utils.fillAxisService(Utils.java:213) at org.apache.axis2.deployment.ServiceBuilder.populateService(ServiceBuilder.java:149) at org.apache.axis2.deployment.repository.util.ArchiveReader.buildServiceGroup(ArchiveReader.java:76) at org.apache.axis2.deployment.repository.util.ArchiveReader.processServiceGroup(ArchiveReader.java:118) at org.apache.axis2.deployment.DeploymentEngine.doDeploy(DeploymentEngine.java:620) .... */ /* public void init(MessageContext msgCtx){ System.out.println("setting MessageContext: " + msgCtx.toString()); this.MsgCtx = msgCtx; } /** public void init(MessageContext inCtx, MessageContext msgCtx){ System.out.println("setting outgoing MessageContext: " + msgCtx.toString()); this.msgCtx = msgCtx; } **/ /** * Das geht * aus : http://marc.theaimsgroup.com/?l=axis-user&m=114715486422557&w=2 */ public void setOperationContext(OperationContext opctx) throws AxisFault { System.out.println("setting in- & outgoing MessageContext: " + opctx.toString()); this.inMsgCtx = opctx.getMessageContext(WSDLConstants.MESSAGE_LABEL_IN_VALUE); this.outMsgCtx = opctx.getMessageContext(WSDLConstants.MESSAGE_LABEL_OUT_VALUE); } /** * Liefert die Gruppen eines Users im EONGDS, dh fuer alle moeglichen MUs. * Die MU des Users kann noch mit uebergeben werden, dann wird auch nur in diesem Container * nach dem User gesucht. * * Das EONGDS ist aktuell noch nicht soweit mit dem GDir synchronisiert, dass darueber * alle MUs abbildbar waeren. * Zur Zeit enthalten GDir und EONGDS nicht die gleichen Gruppen. * * @param kid String die eindeutige Konzern-ID des Users. * @param mu String Kuerzel fuer die zu durchsuchende MU */ public OMElement getEONGDSGroups(OMElement input) throws AxisFault { // String kid, String marketUnit String method = "getEONGDSGroups()"; // fully qualified Names QName kidName = new QName(OMHelper.NAMESPACE, "kid"); String kid = input.getFirstChildWithName(kidName).getText(); QName muName = new QName(OMHelper.NAMESPACE, "mu"); String mu = input.getFirstChildWithName(muName).getText(); System.out.println("Up to search EONGDS-Groups for KID " + kid + " in MU " + mu); OMElement result; if (Utils.isValidKID(kid)){ try { System.out.println("up to query directory..."); ldapQuery = new LDAPQuery(false, LDAPQuery.EONGDS, "o=eon,c=de"); // nur Groupmembership-Attribut ist relevant ldapQuery.setReturnAtts(new String []{"groupmembership"}); String base = "ou=users,ou=" + mu + ",o=eon,c=de"; String filter = "(&(cn=" + kid + ")(objectClass=person))"; NamingEnumeration data = ldapQuery.querySubtree(base, filter); result = OMHelper.getSOAPFromLDAPResult(data); } catch (NamingException ne){ result = null; System.out.println("getEONGDSGroups throws NamingException: " + ne.getMessage()); SOAPFactory soapFactory = OMAbstractFactory.getSOAP12Factory(); SOAPFault soapFault = soapFactory.createSOAPFault(); SOAPFaultCode faultCode = soapFactory.createSOAPFaultCode(soapFault); faultCode.declareNamespace("http://someuri.org", "m"); SOAPFaultValue soapFaultValue = soapFactory.createSOAPFaultValue(faultCode); soapFaultValue.setText("m:FaultException"); SOAPFaultReason soapFaultReason = soapFactory.createSOAPFaultReason(soapFault); SOAPFaultText soapFaultText = soapFactory.createSOAPFaultText(soapFaultReason); soapFaultText.setText("the reason of the error"); // setting the outgoing MessageContext outMsgCtx.setProperty(SOAP12Constants.SOAP_FAULT_CODE_LOCAL_NAME, faultCode); outMsgCtx.setProperty(SOAP12Constants.SOAP_FAULT_REASON_LOCAL_NAME, soapFaultReason); //outMsgCtx.setProperty(SOAP12Constants.SOAP_FAULT_DETAIL_LOCAL_NAME, faultDetail); // throw the AxisFault throw new AxisFault("Exception in service-method :: getEONGDSGrous()", ne); } } else { String text = "invalid KID: KID' " + kid + "' not found in MU '" + mu + "'"; result = handleInvalidData(text, method); } return result; } // ... some more service-methods ... } ------------------------- the SOAP response ----------------- <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> <soapenv:Header /> <soapenv:Body> <soapenv:Fault> <faultcode>soapenv:Client</faultcode> <faultstring>unknown</faultstring> <detail> <Exception> org.apache.axis2.AxisFault at org.apache.axis2.receivers.RawXMLINOutMessageReceiver.invokeBusinessLogic(RawXMLINOutMessageReceiver.java:102) at org.apache.axis2.receivers.AbstractInOutSyncMessageReceiver.receive(AbstractInOutSyncMessageReceiver.java:37) at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:454) at org.apache.axis2.transport.http.HTTPTransportUtils.processHTTPPostRequest(HTTPTransportUtils.java:284) at org.apache.axis2.transport.http.AxisServlet.doPost(AxisServlet.java:136) at javax.servlet.http.HttpServlet.service(HttpServlet.java:709) at javax.servlet.http.HttpServlet.service(HttpServlet.java:802) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214) at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104) .... </Exception> </detail> </soapenv:Fault> </soapenv:Body> </soapenv:Envelope> ------------------------- SOAPFault manually built ----------------- The following is set to the outgoing messageContext in my serviceimplementation - outMsgCtx.setProperty(): <soapenv:Fault xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope"> <soapenv:Code xmlns:m="http://someuri.org"> <soapenv:Value>m:FaultException</soapenv:Value> </soapenv:Code> <soapenv:Reason> <soapenv:Text>the reason of the error</soapenv:Text> </soapenv:Reason> </soapenv:Fault> ------------------------- issues I wonder about ----------------- 1) My details aren't reaching the client. The following I found out while debugging the service: In class RawXMLINOutMessageReceiver::invokeBusinessLogic() my service-method is called and throws an exception as expected. The exception is of type InvocationTargetException and has as a member variable called "target" an object of type AxisFault, with the detailvariable set to the originally thrown exception and the detailmessage set to my individuel errormessage. The invokeBusinessLogic() catches this exception and throws an AxisFault using mentioned InvocationTargetException, like this: throw new AxisFault(e.getMessage()); The message member of the InvocationTargetException is null !! so all my user definitions are gone. 2) The above depicted response looks like SOAP 1.1 and not 1.2. I thought Axis2 would work with SOAP 1.2 per default ? 3) In addition the faultCode says CLIENT !!! 4) I could access the messageContext only by setOperationContext(). I formerly tried the init(param1); if so I get a serious error while starting the server: - Error in schema generating Sorry we don't support methods overloading !!!! java.lang.Exception: Sorry we don't support methods overloading !!!! at org.apache.ws.java2wsdl.SchemaGenerator.generateSchema(SchemaGenerator.java:143) at org.apache.axis2.deployment.util.Utils.fillAxisService(Utils.java:213) at org.apache.axis2.deployment.ServiceBuilder.populateService(ServiceBuilder.java:149) at org.apache.axis2.deployment.repository.util.ArchiveReader.buildServiceGroup(ArchiveReader.java:76) at org.apache.axis2.deployment.repository.util.ArchiveReader.processServiceGroup(ArchiveReader.java:118) at org.apache.axis2.deployment.DeploymentEngine.doDeploy(DeploymentEngine.java:620) Maybe I'm missing something; unfortunately I could not find any sample for using UserExeptions the right way. Could someone clear these issues please - Thanks a lot -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]