[ http://issues.apache.org/jira/browse/AXIS2-801?page=comments#action_12414925 ]
Eran Chinthaka commented on AXIS2-801: -------------------------------------- Init should be called. BTW, set all the fault properties to the in message context when you are throwing the fault. There was a small bug with this and I just fixed it. Please check again. > 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 > Assignee: Eran Chinthaka > > 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]