-
1. Re: Throws exception in WS (back to remote client) without g
mjhammel Jan 21, 2008 7:13 PM (in response to mjhammel)This is still a problem for me, and I'm hoping someone has a pointer as to how I can get rid of the server side stack trace's when I generate an application exception in my web service.
Here is the Web Service:package com.cei.crunch.server.ws.KernelServices; import javax.ejb.*; import javax.persistence.*; import javax.jws.WebService; import javax.jws.WebMethod; import javax.jws.soap.SOAPBinding; import org.apache.log4j.Logger; import com.cei.crunch.ejb.*; import com.cei.crunch.exception.*; /* Make this an EJB3 service endpoint. */ @Stateless /* Make this an Web Services endpoint. */ @WebService( name = "KernelWS", endpointInterface = "com.cei.crunch.server.ws.KernelServices.KernelServicesEndpoint" ) @SOAPBinding(style = SOAPBinding.Style.RPC) /** * The .Crunch interface to Kernel Services */ public class KernelServices implements KernelServicesEndpoint { private static final Logger logPolicy = Logger.getLogger("com.cei.crunch.kernel.policy"); @WebMethod public Policymgmt findPolicyMgmt(String guid) throws CrunchWSException { PolicymgmtBean pb = null; Policymgmt pm = null; pb = new PolicymgmtBean(); if ( pb == null ) logPolicy.info("Failed to get PolicymgmtBean."); else { String msg = null; try { pm = pb.findPolicyMgmt(guid); } catch (CrunchEJBException e) { throw new CrunchWSException(e.getMessage()); } if ( pm != null ) { logPolicy.info("Policymgmt info: \n" + "PolicyName: " + pm.getPolicyName() + "\n" + "Value : " + pm.getPolicyValue() + "\n" ); } } return pm; } }
Here is the client that calls it:package wsKernel; import java.net.URL; import javax.xml.ws.*; import javax.jws.*; /* Web Services interfaces */ import com.cei.crunch.server.ws.kernelservices.*; public class wsKernel { private static URL targetURL = null; private String subscriberID = null; private String pw = null; private String host = null; private String keystore = null; private String storepw = null; private String crunchServer = null; KernelServicesEndpoint ss = null; private Policymgmt pm = null; private String guid = null; private boolean serviceBind() { try { KernelServicesService service = new KernelServicesService(); ss = service.getKernelWSPort(); /* Set NEW Endpoint Location */ BindingProvider bp = (BindingProvider)ss; bp.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, crunchServer); /* Setup to authenticate with the server. */ bp.getRequestContext().put(BindingProvider.USERNAME_PROPERTY, subscriberID); bp.getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, pw); return true; } catch (Exception e) { System.out.println("Failed to login to server."); e.printStackTrace(); System.exit(1); } return false; } public void run(String[] args) { /* Save the subscriber login information. */ if ( args.length != 5 ) { System.out.println("Missing command line args (userid, password, server, keystore)."); System.exit(1); } this.subscriberID = args[0]; this.pw = args[1]; this.host = args[2]; this.keystore = args[3]; this.storepw = args[4]; /* Set the Stegi servers. */ crunchServer = "https://" + this.host + ":8443/Crunch/KernelServices"; System.out.println("Trying to connect to " + crunchServer + " as User: " + subscriberID + ", password: " + pw); /* Configure the keystore for access via HTTPS */ System.setProperty("javax.net.ssl.trustStore", keystore); System.setProperty("javax.net.ssl.trustStorePassword", storepw); System.out.println("Trustore: " + keystore); System.out.println("TrustorePassword: " + storepw); /* Get the WSDL interfaces to the server. */ if ( serviceBind() == false ) { System.out.println("Login failed."); System.exit(1); } /* Retrieve subscriber profile information. */ System.out.println("Search for Policy guid: CRUNCH-POLICY-1"); searchGuid("CRUNCH-POLICY-1"); System.out.println("Search for non-existent Policy guid: BLAH"); searchGuid("BLAH"); } public boolean searchGuid(String guid) { pm = null; try { pm = ss.findPolicyMgmt(guid); } catch (Exception e) { System.out.println("Failed findPolicyMgmt(): " + e.getMessage()); e.printStackTrace(); return false; } if ( pm == null ) { System.out.println("findPolicyMgmt() failed."); return false; } System.out.println("Policy name : " + pm.getPolicyName()); return true; } /* * main() has to be static, but that gets in the way of doing * anything useful. So we create a new instance and call * the run method to get things going. */ public static void main(String[] args) { new wsKernel().run(args); } }
Here is the output on the client side when the client is run:client.test.kernel: [java] Trying to connect to https://localhost:8443/Crunch/KernelServices as User: admin, password: admin [java] Trustore: /home/mjhammel/src/cei/crunch/src/config/jboss/crunch.truststore [java] TrustorePassword: .crunch [java] Search for Policy guid: CRUNCH-POLICY-1 [java] Policy name : COMP-ENABLED [java] Search for non-existent Policy guid: BLAH [java] Failed findPolicyMgmt(): PolicymgmtBean: no matching entry for guid = BLAH [java] com.cei.crunch.server.ws.kernelservices.CrunchWSException_Exception: PolicymgmtBean: no matching entry for guid = BLAH [java] at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) [java] at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) [java] at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) [java] at java.lang.reflect.Constructor.newInstance(Constructor.java:494) [java] at org.jboss.ws.metadata.umdm.FaultMetaData.toServiceException(FaultMetaData.java:384) [java] at org.jboss.ws.core.jaxws.SOAPFaultHelperJAXWS.getSOAPFaultException(SOAPFaultHelperJAXWS.java:128) [java] at org.jboss.ws.core.jaxws.binding.SOAP11BindingJAXWS.throwFaultException(SOAP11BindingJAXWS.java:109) [java] at org.jboss.ws.core.CommonSOAPBinding.unbindResponseMessage(CommonSOAPBinding.java:553) [java] at org.jboss.ws.core.CommonClient.invoke(CommonClient.java:371) [java] at org.jboss.ws.core.jaxws.client.ClientImpl.invoke(ClientImpl.java:243) [java] at org.jboss.ws.core.jaxws.client.ClientProxy.invoke(ClientProxy.java:164) [java] at org.jboss.ws.core.jaxws.client.ClientProxy.invoke(ClientProxy.java:150) [java] at $Proxy17.findPolicyMgmt(Unknown Source) [java] at wsKernel.wsKernel.searchGuid(wsKernel.java:92) [java] at wsKernel.wsKernel.run(wsKernel.java:85) [java] at wsKernel.wsKernel.main(wsKernel.java:114)
And here is the output on the server console from the same test run of the client:17:05:33,452 [CRUNCH] INFO (kernel.policy): Policymgmt info: PolicyName: COMP-ENABLED Value : 1 17:05:33,452 INFO [policy] Policymgmt info: PolicyName: COMP-ENABLED Value : 1 17:05:33,684 ERROR [SOAPFaultHelperJAXWS] SOAP request exception com.cei.crunch.exception.CrunchWSException: PolicymgmtBean: no matching entry for guid = BLAH at com.cei.crunch.server.ws.KernelServices.KernelServices.findPolicyMgmt(KernelServices.java:48) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at org.jboss.wsf.container.jboss42.DefaultInvocationHandler.invoke(DefaultInvocationHandler.java:102) at org.jboss.ws.core.server.ServiceEndpointInvoker.invoke(ServiceEndpointInvoker.java:220) at org.jboss.wsf.stack.jbws.RequestHandlerImpl.processRequest(RequestHandlerImpl.java:408) at org.jboss.wsf.stack.jbws.RequestHandlerImpl.handleRequest(RequestHandlerImpl.java:272) at org.jboss.wsf.stack.jbws.RequestHandlerImpl.doPost(RequestHandlerImpl.java:189) at org.jboss.wsf.stack.jbws.RequestHandlerImpl.handleHttpRequest(RequestHandlerImpl.java:122) at org.jboss.wsf.stack.jbws.EndpointServlet.service(EndpointServlet.java:84) at javax.servlet.http.HttpServlet.service(HttpServlet.java:803) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175) at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:179) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:432) at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:262) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:446) at java.lang.Thread.run(Thread.java:595)
The client side output is correct as far as I'm concerned - I told it to print the stack trace and the exception message is correct. But the SOAP stack trace on the server side shouldn't be printed since this is a simple application error. Obviously I've got some problem with how I hand off my exception to SOAP. I must not be telling it something it needs to know. But what? -
2. Re: Throws exception in WS (back to remote client) without g
asoldano Feb 3, 2008 7:44 PM (in response to mjhammel)But the SOAP stack trace on the server side shouldn't be printed since this is a simple application error.
The stack currently logs every exception before converting it into a soap fault message. We could argue about this choice, however I don't think it's a major issues, just fine tune your log4j conf if you don't want errors emitted by SOAPFaultHelperJAXWS to go to your logs.Obviously I've got some problem with how I hand off my exception to SOAP. I must not be telling it something it needs to know. But what?
This is not related to the above issue about the logs; what problem are you having? please give use further details so that we can help you. -
3. Re: Throws exception in WS (back to remote client) without g
mjhammel Oct 31, 2008 5:33 PM (in response to mjhammel)A follow up, just in case anyone else needs the info.
I ignored this problem for quite some time and finally decided to return to it today. I finally figured out how to tweak log4j to hide those soap fault messages that come from my application throwing an exception. In the jboss-log4j.xml file (in my case, under server/default/conf), I added these lines at the bottom of the file:<category name="org.jboss.ws.core.jaxws.SOAPFaultHelperJAXWS"> <priority value="FATAL"/> </category>
I just had to dig around to find the right category name for these messages. It just took awhile before I could find it.
Hope that helps anyone with a similar concern. -
4. Re: Throws exception in WS (back to remote client) without g
rsobchak Dec 9, 2008 12:09 PM (in response to mjhammel)By setting the priority to FATAL then no exceptions thrown from the web service will be logged to the console or server.log file. I still want system exceptions logged to the console and server.log but only want to restrict application exceptions to the server.log (application exceptions not logged to the console). How do I accomplish this?
-
5. Re: Throws exception in WS (back to remote client) without g
chetanpadhye Jan 16, 2009 6:41 AM (in response to mjhammel)What can be the reason for following exception any idea ?
Exception report
message
description The server encountered an internal error () that prevented it from fulfilling this request.
exception
javax.xml.ws.soap.SOAPFaultException
org.jboss.ws.core.jaxws.SOAPFaultHelperJAXWS.getSOAPFaultException(SOAPFaultHelperJAXWS.java:72)
org.jboss.ws.core.jaxws.binding.SOAP11BindingJAXWS.throwFaultException(SOAP11BindingJAXWS.java:109)
org.jboss.ws.core.CommonSOAPBinding.unbindResponseMessage(CommonSOAPBinding.java:579)
org.jboss.ws.core.CommonClient.invoke(CommonClient.java:380)
org.jboss.ws.core.jaxws.client.ClientImpl.invoke(ClientImpl.java:302)
org.jboss.ws.core.jaxws.client.ClientProxy.invoke(ClientProxy.java:172)
org.jboss.ws.core.jaxws.client.ClientProxy.invoke(ClientProxy.java:152)
$Proxy111.addManager(Unknown Source)
v.doGet(v.java:35)
javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
note The full stack trace of the root cause is available in the JBossWeb/2.0.1.GA logs.