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











<rss version="2.0">
  <channel>
    <title>Amsetwiki: Amset1authentication</title>
    <link>http://socket3.leeds.ac.uk:8080/amsetwiki/</link>
    <description>Wiki for JISC AMSeT Project</description>
    <language>en-us</language>
    <generator>JSPWiki 2.8.1</generator>
    <item>
      <link>http://socket3.leeds.ac.uk:8080/amsetwiki/Wiki.jsp?page=Amset1authentication&amp;version=-1</link>
      <title>Amset1authentication, version -1</title>
      <description>clayton created this page on Wed Sep 02 15:02:59 BST 2009:&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;&lt;h4 id="section-Amset1authentication-WorkflowNameAmset1authentication"&gt;Workflow Name: amset1authentication&lt;a class="hashlink" href="#section-Amset1authentication-WorkflowNameAmset1authentication"&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;h4 id="section-Amset1authentication-ConstituentServicesInitAuthenticationAuthenticationService"&gt;Constituent Services: InitAuthentication; AuthenticationService&lt;a class="hashlink" href="#section-Amset1authentication-ConstituentServicesInitAuthenticationAuthenticationService"&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;h4 id="section-Amset1authentication-WorkflowDescription"&gt;Workflow Description&lt;a class="hashlink" href="#section-Amset1authentication-WorkflowDescription"&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;This is just about the simplest Alfresco workflow and forms the basis of the method by which Alfresco secures all its SOAP over HTTP Web services.  In short, the workflow is initialised by receiving a message that contains the username and password of an Alfresco administration account. These are used to call the &lt;tt&gt;startSession &lt;/tt&gt;operation in the &lt;a class="wikipage" href="/amsetwiki/Wiki.jsp?page=AuthenticationService"&gt;Authentication Service&lt;/a&gt; which returns three strings: the &lt;i&gt;username &lt;/i&gt;submitted in the initialisation message, a &lt;i&gt;security ticket&lt;/i&gt;, and a Java &lt;i&gt;sessionid&lt;/i&gt;.  The security ticket is used to validate further calls to Alfresco Web services.  It is valid for a default period of 5 minutes or until cancelled by calling the &lt;tt&gt;endSession &lt;/tt&gt; operation which takes the ticket string as a parameter.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;Note that by default the initialisation Web service request goes over the wire completely unsecured. An HTTPS (SSL) link will have to be created to fill this teensy weensy security hole.
&lt;/p&gt;
&lt;h4 id="section-Amset1authentication-TechnicalNotes"&gt;Technical Notes&lt;a class="hashlink" href="#section-Amset1authentication-TechnicalNotes"&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;Platform: GlassFishESB V2, NetBeans IDE 6.1 (including BPEL Designer, implementing WS-BPEL 2.0)
Java: 1.6.0_10; Java HotSpot(TM) Client VM 11.0-b15
System: Windows XP version 5.1 running on x86; Cp1252; en_GB (nb).
&lt;/p&gt;
&lt;p&gt;Alfresco Labs 3.1 running on remote server, 64-bit Java 1.6.0_13, Tomcat 6 on Red Hat Enterprise Linux 5.
&lt;/p&gt;
&lt;p /&gt;
&lt;h4 id="section-Amset1authentication-TheProcess"&gt;The Process&lt;a class="hashlink" href="#section-Amset1authentication-TheProcess"&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;&lt;b&gt;Figure 1.1. AuthenticationProcess.bpel Netbeans process diagram&lt;/b&gt; (elements labelled)&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;table border="0" class="imageplugin" align="left"&gt;
&lt;tr&gt;&lt;td&gt;&lt;img src="/amsetwiki/attach/Amset1authentication/amset1authenticationprocess2.png" height="647" width="633" /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;A. InitAuthentication Web service: a 'myRole' partner link, messages posted into this service.&lt;br /&gt;
B. External Alfresco Authentication Service.&lt;br /&gt;
1. Message containing Alfresco admin username and password(!) sent to InitAuthentication, which initializes run.&lt;br /&gt;
2. Admin username and password from incoming InitAuthentication message assigned to corresponding variables in Authentication startSession() operation.&lt;br /&gt;
3. Invoke Authentication Service startSession() operation.&lt;br /&gt;
4. Assign value of ticket string to endSession() variable.&lt;br /&gt;
5. Invoke Authentication Service endSession().&lt;br /&gt;
6. Assign variables to InitAuthentication service reply variable.&lt;br /&gt;
7. Reply to InitAuthentication service.&lt;br /&gt;
&lt;/p&gt;
&lt;p /&gt;
&lt;h4 id="section-Amset1authentication-TheBPELScript"&gt;The BPEL Script&lt;a class="hashlink" href="#section-Amset1authentication-TheBPELScript"&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;The workflow scripts will be available from the AMSeT SourceForge repository so they won't all be reproduced here on the wiki. This first one might help those interested in the NetBeans BPEL Designer to see how the process diagram relates to the BPEL script. &lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Code snippet 1.1. AuthenticationProcess.bpel&lt;/b&gt;
&lt;/p&gt;
&lt;div class="prettify"&gt;
&lt;pre&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;
&amp;lt;process
    name=&amp;quot;AuthenticationProcess&amp;quot;
    targetNamespace=&amp;quot;http://enterprise.netbeans.org/bpel/Amset2Authentication/AuthenticationProcess&amp;quot;
    xmlns=&amp;quot;http://docs.oasis-open.org/wsbpel/2.0/process/executable&amp;quot;
    xmlns:xsd=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;
    xmlns:sxt=&amp;quot;http://www.sun.com/wsbpel/2.0/process/executable/SUNExtension/Trace&amp;quot; 
    xmlns:sxed=&amp;quot;http://www.sun.com/wsbpel/2.0/process/executable/SUNExtension/Editor&amp;quot;
    xmlns:tns=&amp;quot;http://enterprise.netbeans.org/bpel/Amset2Authentication/AuthenticationProcess&amp;quot; xmlns:ns0=&amp;quot;http://j2ee.netbeans.org/wsdl/Amset2Authentication/InitAuthenticationWS&amp;quot; xmlns:ns1=&amp;quot;http://enterprise.netbeans.org/bpel/AuthenticationServiceWrapper&amp;quot; xmlns:ns2=&amp;quot;http://www.alfresco.org/ws/service/authentication/1.0&amp;quot;&amp;gt;
    &amp;lt;import namespace=&amp;quot;http://j2ee.netbeans.org/wsdl/Amset2Authentication/InitAuthenticationWS&amp;quot; location=&amp;quot;InitAuthenticationWS.wsdl&amp;quot; importType=&amp;quot;http://schemas.xmlsoap.org/wsdl/&amp;quot;/&amp;gt;
    &amp;lt;import namespace=&amp;quot;http://enterprise.netbeans.org/bpel/AuthenticationServiceWrapper&amp;quot; location=&amp;quot;AuthenticationServiceWrapper.wsdl&amp;quot; importType=&amp;quot;http://schemas.xmlsoap.org/wsdl/&amp;quot;/&amp;gt;
    &amp;lt;import namespace=&amp;quot;http://www.alfresco.org/ws/service/authentication/1.0&amp;quot; location=&amp;quot;AuthenticationService.wsdl&amp;quot; importType=&amp;quot;http://schemas.xmlsoap.org/wsdl/&amp;quot;/&amp;gt;
    &amp;lt;partnerLinks&amp;gt;
        &amp;lt;!--[B]--&amp;gt;&amp;lt;partnerLink name=&amp;quot;AuthenticationServicePL&amp;quot; partnerLinkType=&amp;quot;ns1:AuthenticationServiceSoapPortLinkType&amp;quot; partnerRole=&amp;quot;AuthenticationServiceSoapPortRole&amp;quot;/&amp;gt;
        &amp;lt;!--[A]--&amp;gt;&amp;lt;partnerLink name=&amp;quot;InitAuthenticationPL&amp;quot; partnerLinkType=&amp;quot;ns0:InitAuthenticationWS&amp;quot; myRole=&amp;quot;InitAuthenticationWSPortTypeRole&amp;quot;/&amp;gt;
    &amp;lt;/partnerLinks&amp;gt;
    &amp;lt;variables&amp;gt;
        &amp;lt;variable name=&amp;quot;EndSessionOut&amp;quot; messageType=&amp;quot;ns2:endSessionResponse&amp;quot;/&amp;gt;
        &amp;lt;variable name=&amp;quot;EndSessionIn&amp;quot; messageType=&amp;quot;ns2:endSessionRequest&amp;quot;/&amp;gt;
        &amp;lt;variable name=&amp;quot;InitAuthenticationWSOperationOut&amp;quot; messageType=&amp;quot;ns0:InitAuthenticationWSOperationResponse&amp;quot;/&amp;gt;
        &amp;lt;variable name=&amp;quot;StartSessionOut&amp;quot; xmlns:auth=&amp;quot;http://www.alfresco.org/ws/service/authentication/1.0&amp;quot; messageType=&amp;quot;auth:startSessionResponse&amp;quot;/&amp;gt;
        &amp;lt;variable name=&amp;quot;StartSessionIn&amp;quot; xmlns:auth=&amp;quot;http://www.alfresco.org/ws/service/authentication/1.0&amp;quot; messageType=&amp;quot;auth:startSessionRequest&amp;quot;/&amp;gt;
        &amp;lt;variable name=&amp;quot;InitAuthenticationWSOperationIn&amp;quot; messageType=&amp;quot;ns0:InitAuthenticationWSOperationRequest&amp;quot;/&amp;gt;
    &amp;lt;/variables&amp;gt;
    &amp;lt;sequence&amp;gt;
        &amp;lt;!--[1]--&amp;gt;&amp;lt;receive name=&amp;quot;Receive1&amp;quot; createInstance=&amp;quot;yes&amp;quot; partnerLink=&amp;quot;InitAuthenticationPL&amp;quot; operation=&amp;quot;InitAuthenticationWSOperation&amp;quot; portType=&amp;quot;ns0:InitAuthenticationWSPortType&amp;quot; variable=&amp;quot;InitAuthenticationWSOperationIn&amp;quot;/&amp;gt;
        &amp;lt;!--[2]--&amp;gt;&amp;lt;assign name=&amp;quot;Assign1&amp;quot;&amp;gt;
            &amp;lt;copy&amp;gt;
                &amp;lt;from variable=&amp;quot;InitAuthenticationWSOperationIn&amp;quot; part=&amp;quot;username&amp;quot;/&amp;gt;
                &amp;lt;to&amp;gt;$StartSessionIn.parameters/ns2:username&amp;lt;/to&amp;gt;
            &amp;lt;/copy&amp;gt;
            &amp;lt;copy&amp;gt;
                &amp;lt;from variable=&amp;quot;InitAuthenticationWSOperationIn&amp;quot; part=&amp;quot;password&amp;quot;/&amp;gt;
                &amp;lt;to&amp;gt;$StartSessionIn.parameters/ns2:password&amp;lt;/to&amp;gt;
            &amp;lt;/copy&amp;gt;
        &amp;lt;/assign&amp;gt;
        &amp;lt;!--[3]--&amp;gt;&amp;lt;invoke name=&amp;quot;Invoke1&amp;quot; partnerLink=&amp;quot;AuthenticationServicePL&amp;quot; operation=&amp;quot;startSession&amp;quot; xmlns:auth=&amp;quot;http://www.alfresco.org/ws/service/authentication/1.0&amp;quot; portType=&amp;quot;auth:AuthenticationServiceSoapPort&amp;quot; inputVariable=&amp;quot;StartSessionIn&amp;quot; outputVariable=&amp;quot;StartSessionOut&amp;quot;/&amp;gt;
        &amp;lt;!--[4]--&amp;gt;&amp;lt;assign name=&amp;quot;Assign2&amp;quot;&amp;gt;
            &amp;lt;copy&amp;gt;
                &amp;lt;from&amp;gt;$StartSessionOut.parameters/ns2:startSessionReturn/ns2:ticket&amp;lt;/from&amp;gt;
                &amp;lt;to&amp;gt;$EndSessionIn.parameters/ns2:ticket&amp;lt;/to&amp;gt;
            &amp;lt;/copy&amp;gt;
        &amp;lt;/assign&amp;gt;
        &amp;lt;!--[5]--&amp;gt;&amp;lt;invoke name=&amp;quot;Invoke2&amp;quot; partnerLink=&amp;quot;AuthenticationServicePL&amp;quot; operation=&amp;quot;endSession&amp;quot; portType=&amp;quot;ns2:AuthenticationServiceSoapPort&amp;quot; inputVariable=&amp;quot;EndSessionIn&amp;quot; outputVariable=&amp;quot;EndSessionOut&amp;quot;/&amp;gt;
        &amp;lt;!--[6]--&amp;gt;&amp;lt;assign name=&amp;quot;Assign3&amp;quot;&amp;gt;
            &amp;lt;copy&amp;gt;
                &amp;lt;from&amp;gt;$StartSessionOut.parameters/ns2:startSessionReturn/ns2:username&amp;lt;/from&amp;gt;
                &amp;lt;to variable=&amp;quot;InitAuthenticationWSOperationOut&amp;quot; part=&amp;quot;username&amp;quot;/&amp;gt;
            &amp;lt;/copy&amp;gt;
            &amp;lt;copy&amp;gt;
                &amp;lt;from&amp;gt;$StartSessionOut.parameters/ns2:startSessionReturn/ns2:ticket&amp;lt;/from&amp;gt;
                &amp;lt;to variable=&amp;quot;InitAuthenticationWSOperationOut&amp;quot; part=&amp;quot;ticket&amp;quot;/&amp;gt;
            &amp;lt;/copy&amp;gt;
            &amp;lt;copy&amp;gt;
                &amp;lt;from&amp;gt;$StartSessionOut.parameters/ns2:startSessionReturn/ns2:sessionid&amp;lt;/from&amp;gt;
                &amp;lt;to variable=&amp;quot;InitAuthenticationWSOperationOut&amp;quot; part=&amp;quot;sessionId&amp;quot;/&amp;gt;
            &amp;lt;/copy&amp;gt;
            
        &amp;lt;/assign&amp;gt;
        &amp;lt;!--[7]--&amp;gt;&amp;lt;reply name=&amp;quot;Reply1&amp;quot; partnerLink=&amp;quot;InitAuthenticationPL&amp;quot; operation=&amp;quot;InitAuthenticationWSOperation&amp;quot; portType=&amp;quot;ns0:InitAuthenticationWSPortType&amp;quot; variable=&amp;quot;InitAuthenticationWSOperationOut&amp;quot;/&amp;gt;
    &amp;lt;/sequence&amp;gt;
&amp;lt;/process&amp;gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;h4 id="section-Amset1authentication-InputOutput"&gt;Input/Output&lt;a class="hashlink" href="#section-Amset1authentication-InputOutput"&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;&lt;b&gt;Code snippet 1.2. InitAuthenticationWS SOAP Request&lt;/b&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p /&gt;
&lt;div class="prettify"&gt;
&lt;pre&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;
&amp;lt;SOAP-ENV:Envelope xmlns:SOAP-ENV=&amp;quot;http://schemas.xmlsoap.org/soap/envelope/&amp;quot;&amp;gt;
    &amp;lt;SOAP-ENV:Body&amp;gt;
        &amp;lt;ns1:startSession
            xmlns:msgns=&amp;quot;http://www.alfresco.org/ws/service/authentication/1.0&amp;quot; xmlns:ns1=&amp;quot;http://www.alfresco.org/ws/service/authentication/1.0&amp;quot;&amp;gt;
            &amp;lt;ns1:username&amp;gt;admin&amp;lt;/ns1:username&amp;gt;
            &amp;lt;ns1:password&amp;gt;adminpassword&amp;lt;/ns1:password&amp;gt;
        &amp;lt;/ns1:startSession&amp;gt;
    &amp;lt;/SOAP-ENV:Body&amp;gt;
&amp;lt;/SOAP-ENV:Envelope&amp;gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;&lt;b&gt;Code snippet 1.3. InitAuthenticationWS SOAP Response&lt;/b&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p /&gt;
&lt;div class="prettify"&gt;
&lt;pre&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;
&amp;lt;soapenv:Envelope
    xmlns:soapenv=&amp;quot;http://schemas.xmlsoap.org/soap/envelope/&amp;quot;
    xmlns:xsd=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;&amp;gt;
    &amp;lt;soapenv:Body&amp;gt;
        &amp;lt;startSessionResponse xmlns=&amp;quot;http://www.alfresco.org/ws/service/authentication/1.0&amp;quot;&amp;gt;
            &amp;lt;startSessionReturn&amp;gt;
                &amp;lt;username&amp;gt;admin&amp;lt;/username&amp;gt;
                &amp;lt;ticket&amp;gt;TICKET_39410d7b4d91e85a78f896822f1ff9edd07d10d2&amp;lt;/ticket&amp;gt;
                &amp;lt;sessionid&amp;gt;256C5F7B29C64291B5962519D122C485&amp;lt;/sessionid&amp;gt;
            &amp;lt;/startSessionReturn&amp;gt;
        &amp;lt;/startSessionResponse&amp;gt;
    &amp;lt;/soapenv:Body&amp;gt;
&amp;lt;/soapenv:Envelope&amp;gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;h4 id="section-Amset1authentication-Faults"&gt;Faults&lt;a class="hashlink" href="#section-Amset1authentication-Faults"&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;If an invalid set of credentials is received by Alfresco, then an exception is thrown in the Acegi security system and the following SOAP fault message is returned.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Code snippet 1.4. AuthenticationFault SOAP response &lt;/b&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;div class="prettify"&gt;
&lt;pre&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;
&amp;lt;soapenv:Envelope
    xmlns:soapenv=&amp;quot;http://schemas.xmlsoap.org/soap/envelope/&amp;quot;
    xmlns:xsd=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;&amp;gt;
    &amp;lt;soapenv:Body&amp;gt;
        &amp;lt;soapenv:Fault&amp;gt;
            &amp;lt;faultcode&amp;gt;soapenv:Server.generalException&amp;lt;/faultcode&amp;gt;
            &amp;lt;faultstring/&amp;gt;
            &amp;lt;detail&amp;gt;
                &amp;lt;ns1:AuthenticationFault xmlns:ns1=&amp;quot;http://www.alfresco.org/ws/service/authentication/1.0&amp;quot;&amp;gt;
                    &amp;lt;ns1:errorCode&amp;gt;100&amp;lt;/ns1:errorCode&amp;gt;
                    &amp;lt;ns1:message&amp;gt;net.sf.acegisecurity.BadCredentialsException: Bad credentials presented
net.sf.acegisecurity.BadCredentialsException: Bad credentials presented
	at net.sf.acegisecurity.providers.dao.DaoAuthenticationProvider.getUserFromBackend(DaoAuthenticationProvider.java:393)
	at net.sf.acegisecurity.providers.dao.DaoAuthenticationProvider.authenticate(DaoAuthenticationProvider.java:225)
	at net.sf.acegisecurity.providers.ProviderManager.doAuthentication(ProviderManager.java:159)
	at net.sf.acegisecurity.AbstractAuthenticationManager.authenticate(AbstractAuthenticationManager.java:49)
	at org.alfresco.repo.security.authentication.AuthenticationComponentImpl.authenticateImpl(AuthenticationComponentImpl.java:74)
	at org.alfresco.repo.security.authentication.AbstractAuthenticationComponent.authenticate(AbstractAuthenticationComponent.java:130)
	at org.alfresco.repo.security.authentication.AuthenticationServiceImpl.authenticate(AuthenticationServiceImpl.java:118)
	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:597)
	at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:296)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:177)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:144)
	at net.sf.acegisecurity.intercept.method.aopalliance.MethodSecurityInterceptor.invoke(MethodSecurityInterceptor.java:80)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:166)
	at org.alfresco.repo.security.permissions.impl.ExceptionTranslatorMethodInterceptor.invoke(ExceptionTranslatorMethodInterceptor.java:49)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:166)
	at org.alfresco.repo.audit.AuditComponentImpl.audit(AuditComponentImpl.java:275)
	at org.alfresco.repo.audit.AuditMethodInterceptor.invoke(AuditMethodInterceptor.java:69)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:166)
	at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:107)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:166)
	at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
	at $Proxy24.authenticate(Unknown Source)
	at org.alfresco.repo.webservice.authentication.AuthenticationWebService.startSession(AuthenticationWebService.java:83)
	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:597)
	at org.apache.axis.providers.java.RPCProvider.invokeMethod(RPCProvider.java:397)
	at org.apache.axis.providers.java.RPCProvider.processMessage(RPCProvider.java:186)
	at org.apache.axis.providers.java.JavaProvider.invoke(JavaProvider.java:323)
	at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)
	at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
	at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
	at org.apache.axis.handlers.soap.SOAPService.invoke(SOAPService.java:454)
	at org.apache.axis.server.AxisServer.invoke(AxisServer.java:281)
	at org.apache.axis.transport.http.AxisServlet.doPost(AxisServlet.java:699)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
	at org.apache.axis.transport.http.AxisServletBase.service(AxisServletBase.java:327)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
	at java.lang.Thread.run(Thread.java:619)
&amp;lt;/ns1:message&amp;gt;
                &amp;lt;/ns1:AuthenticationFault&amp;gt;
                &amp;lt;ns2:exceptionName xmlns:ns2=&amp;quot;http://xml.apache.org/axis/&amp;quot;&amp;gt;org.alfresco.repo.webservice.authentication.AuthenticationFault&amp;lt;/ns2:exceptionName&amp;gt;
                &amp;lt;ns3:stackTrace xmlns:ns3=&amp;quot;http://xml.apache.org/axis/&amp;quot;&amp;gt;
	at org.alfresco.repo.webservice.authentication.AuthenticationWebService.startSession(AuthenticationWebService.java:96)
	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:597)
	at org.apache.axis.providers.java.RPCProvider.invokeMethod(RPCProvider.java:397)
	at org.apache.axis.providers.java.RPCProvider.processMessage(RPCProvider.java:186)
	at org.apache.axis.providers.java.JavaProvider.invoke(JavaProvider.java:323)
	at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)
	at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
	at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
	at org.apache.axis.handlers.soap.SOAPService.invoke(SOAPService.java:454)
	at org.apache.axis.server.AxisServer.invoke(AxisServer.java:281)
	at org.apache.axis.transport.http.AxisServlet.doPost(AxisServlet.java:699)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
	at org.apache.axis.transport.http.AxisServletBase.service(AxisServletBase.java:327)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
	at java.lang.Thread.run(Thread.java:619)
&amp;lt;/ns3:stackTrace&amp;gt;
                &amp;lt;ns4:hostname xmlns:ns4=&amp;quot;http://xml.apache.org/axis/&amp;quot;&amp;gt;myhost.leeds.ac.uk&amp;lt;/ns4:hostname&amp;gt;
            &amp;lt;/detail&amp;gt;
        &amp;lt;/soapenv:Fault&amp;gt;
    &amp;lt;/soapenv:Body&amp;gt;
&amp;lt;/soapenv:Envelope&amp;gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;Similar to exception handling in Java, it is possible to catch faults in the BPEL process and initiate appropriate faulthandler processes. As a simple example, if we add the following variable to the process above 
&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Code snippet 1.5.&lt;/b&gt; 
&lt;/p&gt;
&lt;div class="prettify"&gt;
&lt;pre&gt;
&amp;lt;variable name=&amp;quot;InvalidCredentialsFaultVar&amp;quot; messageType=&amp;quot;ns0:InitAuthenticationFault&amp;quot;/&amp;gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;and add the following faulthandlers element after the variables block
&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Code snippet 1.6.&lt;/b&gt; 
&lt;/p&gt;
&lt;div class="prettify"&gt;
&lt;pre&gt;
&amp;lt;faultHandlers&amp;gt;
        &amp;lt;catchAll&amp;gt;
            &amp;lt;sequence name=&amp;quot;Sequence1&amp;quot;&amp;gt;
                &amp;lt;assign name=&amp;quot;Assign4&amp;quot;&amp;gt;
                    &amp;lt;copy&amp;gt;
                        &amp;lt;from&amp;gt;'Authentication Fault of Indeterminate Nature'&amp;lt;/from&amp;gt;
                        &amp;lt;to variable=&amp;quot;InvalidCredentialsFaultVar&amp;quot; part=&amp;quot;faultMessage&amp;quot;/&amp;gt;
                    &amp;lt;/copy&amp;gt;
                &amp;lt;/assign&amp;gt;
                &amp;lt;reply name=&amp;quot;Reply2&amp;quot; partnerLink=&amp;quot;InitAuthenticationPL&amp;quot; operation=&amp;quot;InitAuthenticationWSOperation&amp;quot; portType=&amp;quot;ns0:InitAuthenticationWSPortType&amp;quot; faultName=&amp;quot;ns0:invalidCredentialsFault&amp;quot; variable=&amp;quot;InvalidCredentialsFaultVar&amp;quot;/&amp;gt;
            &amp;lt;/sequence&amp;gt;
        &amp;lt;/catchAll&amp;gt;
    &amp;lt;/faultHandlers&amp;gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;then we get the following process diagram
&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Figure 1.2 AuthenticationProcess plus catchall fault handler.&lt;/b&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;table border="0" class="imageplugin" align="left"&gt;
&lt;tr&gt;&lt;td&gt;&lt;img src="/amsetwiki/attach/Amset1authentication/amset1authenticationfaulthandler.png" height="584" width="662" /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;Now in response to receiving an invalid set of credentials the SOAP message received by the client is simply 
&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Code snippet 1.7.&lt;/b&gt; 
&lt;/p&gt;
&lt;div class="prettify"&gt;
&lt;pre&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;
&amp;lt;SOAP-ENV:Envelope xmlns:SOAP-ENV=&amp;quot;http://schemas.xmlsoap.org/soap/envelope/&amp;quot; xmlns:xsd=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; xsi:schemaLocation=&amp;quot;http://schemas.xmlsoap.org/soap/envelope/ http://schemas.xmlsoap.org/soap/envelope/&amp;quot;&amp;gt;
  &amp;lt;SOAP-ENV:Body&amp;gt;
    &amp;lt;SOAP-ENV:Fault&amp;gt;
      &amp;lt;faultcode xmlns=&amp;quot;&amp;quot;&amp;gt;SOAP-ENV:Client&amp;lt;/faultcode&amp;gt;
      &amp;lt;faultstring xmlns=&amp;quot;&amp;quot;&amp;gt;invalidCredentialsFault&amp;lt;/faultstring&amp;gt;
      &amp;lt;detail xmlns=&amp;quot;&amp;quot;&amp;gt;
        &amp;lt;faultMessage&amp;gt;Authentication Fault of Indeterminate Nature&amp;lt;/faultMessage&amp;gt;
      &amp;lt;/detail&amp;gt;
    &amp;lt;/SOAP-ENV:Fault&amp;gt;
  &amp;lt;/SOAP-ENV:Body&amp;gt;
&amp;lt;/SOAP-ENV:Envelope&amp;gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;and the nasty stack trace from the native Alfresco exception is no longer visible.  The fault message code in the InitAuthenticationWS wsdl is 
&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Code snippet 1.8.&lt;/b&gt;
 
&lt;/p&gt;
&lt;div class="prettify"&gt;
&lt;pre&gt;
&amp;lt;wsdl&amp;gt;
...
...
&amp;lt;message name=&amp;quot;InitAuthenticationFault&amp;quot;&amp;gt;
        &amp;lt;part name=&amp;quot;faultMessage&amp;quot; type=&amp;quot;xsd:string&amp;quot; /&amp;gt;
    &amp;lt;/message&amp;gt;
    &amp;lt;portType name=&amp;quot;InitAuthenticationWSPortType&amp;quot;&amp;gt;
        &amp;lt;operation name=&amp;quot;InitAuthenticationWSOperation&amp;quot;&amp;gt;
            &amp;lt;input name=&amp;quot;input1&amp;quot; message=&amp;quot;tns:InitAuthenticationWSOperationRequest&amp;quot;/&amp;gt;
            &amp;lt;output name=&amp;quot;output1&amp;quot; message=&amp;quot;tns:InitAuthenticationWSOperationResponse&amp;quot;/&amp;gt;
            &amp;lt;fault name=&amp;quot;invalidCredentialsFault&amp;quot; message=&amp;quot;tns:InitAuthenticationFault&amp;quot;/&amp;gt;
        &amp;lt;/operation&amp;gt;
    &amp;lt;/portType&amp;gt;
    &amp;lt;binding name=&amp;quot;InitAuthenticationWSBinding&amp;quot; type=&amp;quot;tns:InitAuthenticationWSPortType&amp;quot;&amp;gt;
        &amp;lt;soap:binding style=&amp;quot;rpc&amp;quot; transport=&amp;quot;http://schemas.xmlsoap.org/soap/http&amp;quot;/&amp;gt;
        &amp;lt;operation name=&amp;quot;InitAuthenticationWSOperation&amp;quot;&amp;gt;
            &amp;lt;soap:operation/&amp;gt;
            &amp;lt;input name=&amp;quot;input1&amp;quot;&amp;gt;
                &amp;lt;soap:body use=&amp;quot;literal&amp;quot; namespace=&amp;quot;http://j2ee.netbeans.org/wsdl/Amset2Authentication/InitAuthenticationWS&amp;quot;/&amp;gt;
            &amp;lt;/input&amp;gt;
            &amp;lt;output name=&amp;quot;output1&amp;quot;&amp;gt;
                &amp;lt;soap:body use=&amp;quot;literal&amp;quot; namespace=&amp;quot;http://j2ee.netbeans.org/wsdl/Amset2Authentication/InitAuthenticationWS&amp;quot;/&amp;gt;
            &amp;lt;/output&amp;gt;
            &amp;lt;fault name=&amp;quot;invalidCredentialsFault&amp;quot;&amp;gt;
                &amp;lt;soap:fault name=&amp;quot;invalidCredentialsFault&amp;quot; namespace=&amp;quot;http://j2ee.netbeans.org/wsdl/Amset2Authentication/InitAuthenticationWS&amp;quot; use=&amp;quot;literal&amp;quot;/&amp;gt;
            &amp;lt;/fault&amp;gt;
        &amp;lt;/operation&amp;gt;
    &amp;lt;/binding&amp;gt;
...
...
&amp;lt;/wsdl&amp;gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;p /&gt;</description>
      <enclosure url="http://socket3.leeds.ac.uk:8080/amsetwiki/attach/Amset1authentication/amset1authenticationfaulthandler.png" length="33272" type="image/png" />
      <enclosure url="http://socket3.leeds.ac.uk:8080/amsetwiki/attach/Amset1authentication/amset1authenticationprocess2.png" length="56321" type="image/png" />
      <pubDate>Wed, 02 Sep 2009 14:02:59 GMT</pubDate>
    </item>
  </channel>
</rss>

