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]