-----Original Message-----
From: Simon Laws [mailto:[email protected]] 
Sent: 25 May 2010 13:19
To: [email protected]
Subject: Re: Exception with security (again)

On Tue, May 25, 2010 at 12:45 PM, Gregor Kiddie
<[email protected]> wrote:
>
>
> -----Original Message-----
> From: Simon Laws [mailto:[email protected]]
> Sent: 25 May 2010 11:47
> To: [email protected]
> Subject: Re: Exception with security (again)
>
> On Mon, May 24, 2010 at 5:50 PM, Gregor Kiddie
> <[email protected]> wrote:
>>
>>
>> -----Original Message-----
>> From: Simon Laws [mailto:[email protected]]
>> Sent: 24 May 2010 17:01
>> To: [email protected]
>> Subject: Re: Exception with security (again)
>>
>> On Mon, May 24, 2010 at 3:47 PM, Gregor Kiddie
>> <[email protected]> wrote:
>>>
>>>
>>> -----Original Message-----
>>> From: Simon Laws [mailto:[email protected]]
>>> Sent: 24 May 2010 15:24
>>> To: [email protected]
>>> Subject: Re: Exception with security (again)
>>>
>>> On Mon, May 24, 2010 at 2:40 PM, Gregor Kiddie
>>> <[email protected]> wrote:
>>>>
>>>>
>>>> -----Original Message-----
>>>> From: Simon Laws [mailto:[email protected]]
>>>> Sent: 24 May 2010 13:54
>>>> To: [email protected]
>>>> Subject: Re: Exception with security (again)
>>>>
>>>> On Mon, May 24, 2010 at 11:03 AM, Gregor Kiddie
>>>> <[email protected]> wrote:
>>>>>
>>>>>
>>>>> -----Original Message-----
>>>>> From: Simon Laws [mailto:[email protected]]
>>>>> Sent: 24 May 2010 09:54
>>>>> To: [email protected]
>>>>> Subject: Re: Exception with security (again)
>>>>>
>>>>> On Fri, May 21, 2010 at 8:17 PM, Gregor Kiddie
>>>>> <[email protected]> wrote:
>>>>>> Ok, last one before I leave for the weekend cursing Tuscany!
>>>>>>
>>>>>>
>>>>>>
>>>>>> Using an authentication policy on a binding.ws generates the following
>>>>>> exception.
>>>>>>
>>>>>>
>>>>>>
>>>>>> Caused by: java.lang.ArrayIndexOutOfBoundsException: 1
>>>>>>
>>>>>>                 at
>>>>>> org.apache.tuscany.sca.databinding.axiom.OMElementWrapperHandler.setChildren(OMElementWrapperHandler.java:76)
>>>>>>
>>>>>> It looks like childObjects passed into the method has all the parameters
>>>>>> wrapped up in a single piece of XML
>>>>>>
>>>>>> The ChildElements which is pulled from the operation which is passed in, 
>>>>>> has
>>>>>> them split up into three Elements.
>>>>>>
>>>>>>
>>>>>>
>>>>>> The loop in setChildren uses the size of the ChildElements as it's upper
>>>>>> bounds and references both objects. Unsurprisingly, when it gets to
>>>>>> childObjects[1] it blows up.
>>>>>>
>>>>>>
>>>>>>
>>>>>> I've been running through everything for a couple of hours and I'm now
>>>>>> calling defeat. I'm close to dumping Tuscany for this!
>>>>>>
>>>>>>
>>>>>>
>>>>>> Gk.
>>>>>
>>>>> Hi Gregor
>>>>>
>>>>> Sorry that you're having a frustrating time. Can you describe your
>>>>> scenario so I can reproduce it here.
>>>>>
>>>>> Thanks
>>>>>
>>>>> Simon
>>>>>
>>>>>
>>>>> --
>>>>> Apache Tuscany committer: tuscany.apache.org
>>>>> Co-author of a book about Tuscany and SCA: tuscanyinaction.com
>>>>>
>>>>> My Composite looks like
>>>>> <?xml version="1.0" encoding="UTF-8"?>
>>>>> <composite xmlns="http://www.osoa.org/xmlns/sca/1.0";
>>>>>                targetNamespace="com.mycompany.myproduct.authentication"
>>>>>                xmlns:tuscany="http://tuscany.apache.org/xmlns/sca/1.0";
>>>>>                name="authentication" >
>>>>>
>>>>>        <component name="Authentication">
>>>>>                <implementation.spring 
>>>>> location="WEB-INF/classes/applicationContext.xml" />
>>>>>                <service name="Authentication">
>>>>>                        <binding.ws />
>>>>>                </service>
>>>>>                <reference name="authenticationProvider" >
>>>>>                        <binding.ws 
>>>>> wsdlElement="http://soa.mycompany.com/webservices/#wsdl.port(MyService/MyServiceSoap12)"
>>>>>  requires="authentication" />
>>>>>                </reference>
>>>>>        </component>
>>>>> </composite>
>>>>>
>>>>> My definitions file looks like
>>>>> <?xml version="1.0" encoding="UTF-8"?>
>>>>> <definitions xmlns="http://www.osoa.org/xmlns/sca/1.0";
>>>>>                         xmlns:sca="http://www.osoa.org/xmlns/sca/1.0";
>>>>>                         
>>>>> xmlns:tuscany="http://tuscany.apache.org/xmlns/sca/1.0";
>>>>>                         targetNamespace="com.mycompany.richfx.policy" >
>>>>>
>>>>>        <policySet name="myCompanyPolicySet" provides="authentication" 
>>>>> appliesTo="sca:binding.ws">
>>>>>                <tuscany:basicAuthentication>
>>>>>                        <tuscany:userName>someusername</tuscany:userName>
>>>>>                        <tuscany:password>some-password</tuscany:password>
>>>>>                </tuscany:basicAuthentication>
>>>>>        </policySet>
>>>>> </definitions>
>>>>>
>>>>> Application starts up fine, but when I make the call to the external 
>>>>> webservice (the reference), I get the error in the OP.
>>>>> Remove the definitions file and the requires="authentication", and the 
>>>>> calls works but gets rejected due to missing the basic authorisation.
>>>>>
>>>>
>>>> Hi Gregor
>>>>
>>>> There's something odd going on here. I set up a test where I deployed
>>>> our calculator service with the AddService deployed as a web service
>>>> to Tomcat with Basic Authentication turned on.
>>>>
>>>> I created a client project where the calculator has a reference to the
>>>> AddService with the "authentication" intent set. This was my
>>>> definitions file.
>>>>
>>>> <definitions xmlns="http://www.osoa.org/xmlns/sca/1.0";
>>>>             targetNamespace="http://itest/policy";
>>>>                 xmlns:sca="http://www.osoa.org/xmlns/sca/1.0";
>>>>                 xmlns:tuscany="http://tuscany.apache.org/xmlns/sca/1.0";
>>>>             xmlns:ip="http://itest/policy"; >
>>>>
>>>>
>>>>    <sca:policySet name="BasicAuthenticationPolicySet"
>>>>                   provides="authentication"
>>>>                   appliesTo="sca:binding.ws">
>>>>        <tuscany:basicAuthentication>
>>>>          <tuscany:userName>tuscanyuser</tuscany:userName>
>>>>          <tuscany:password>tuscanypwd</tuscany:password>
>>>>        </tuscany:basicAuthentication>
>>>>    </sca:policySet>
>>>>
>>>>
>>>> </definitions>
>>>>
>>>> I tried it with both a Java implementation and a spring
>>>> implementation. Here's my client component from the composite file...
>>>>
>>>>    <component name="CalculatorServiceComponent">
>>>>                <!--implementation.java 
>>>> class="calculator.CalculatorServiceImpl"/-->
>>>>        <implementation.spring
>>>> location="META-INF/spring/CalculatorService-context.xml"/>
>>>>        <reference name="addService" >
>>>>           <interface.java interface="calculator.AddService" />
>>>>            <binding.ws requires="authentication"
>>>> uri="http://localhost:8080/sample-calculator-ws-webapp/AddServiceComponent"/>
>>>>        </reference>
>>>>        <reference name="subtractService" target="SubtractServiceComponent" 
>>>> />
>>>>        <reference name="multiplyService" target="MultiplyServiceComponent" 
>>>> />
>>>>        <reference name="divideService" target="DivideServiceComponent" />
>>>>    </component>
>>>>
>>>> With the password correctly set I get....
>>>>
>>>> 24-May-2010 13:50:29 org.apache.tuscany.sca.node.impl.NodeImpl <init>
>>>> INFO: Creating node: Calculator.composite
>>>> 24-May-2010 13:50:29 org.apache.tuscany.sca.node.impl.NodeImpl 
>>>> configureNode
>>>> INFO: Loading contribution:
>>>> file:/D:/sca-java-1.x/samples/calculator/target/classes/
>>>> 24-May-2010 13:50:30 org.apache.tuscany.sca.node.impl.NodeImpl start
>>>> INFO: Starting node: Calculator.composite
>>>> - Loading XML bean definitions from URL
>>>> [file:/D:/sca-java-1.x/samples/calculator/target/classes/META-INF/spring/CalculatorService-context.xml]
>>>> - Module validation failed: The system is attempting to engage a
>>>> module that is not available: rampart
>>>> - Refreshing 
>>>> org.apache.tuscany.sca.implementation.spring.runtime.context.scagenericapplicationcont...@14a9387:
>>>> display name 
>>>> [org.apache.tuscany.sca.implementation.spring.runtime.context.scagenericapplicationcont...@14a9387];
>>>> startup date [Mon May 24 13:50:31 BST 2010]; parent:
>>>> org.apache.tuscany.sca.implementation.spring.runtime.context.scaparentapplicationcont...@18782a7
>>>> - Bean factory for application context
>>>> [org.apache.tuscany.sca.implementation.spring.runtime.context.scagenericapplicationcont...@14a9387]:
>>>> org.springframework.beans.factory.xml.xmlbeanfact...@192d604
>>>> Spring parent context - containsBean called for name: loadTimeWeaver
>>>> - Pre-instantiating singletons in
>>>> org.springframework.beans.factory.xml.xmlbeanfact...@192d604: defining
>>>> beans [CalculatorServiceBean]; parent:
>>>> org.apache.tuscany.sca.implementation.spring.runtime.context.scaparentapplicationcont...@18782a7
>>>> Spring parent context - getBean called for name: addService
>>>> Spring parent context - getBean called for name: subtractService
>>>> Spring parent context - getBean called for name: multiplyService
>>>> Spring parent context - getBean called for name: divideService
>>>> 3 + 2=5.0
>>>> 3 - 2=1.0
>>>> 3 * 2=6.0
>>>> 3 / 2=1.5
>>>> 24-May-2010 13:50:32 org.apache.tuscany.sca.node.impl.NodeImpl stop
>>>> INFO: Stopping node: Calculator.composite
>>>> - Closing 
>>>> org.apache.tuscany.sca.implementation.spring.runtime.context.scagenericapplicationcont...@14a9387:
>>>> display name 
>>>> [org.apache.tuscany.sca.implementation.spring.runtime.context.scagenericapplicationcont...@14a9387];
>>>> startup date [Mon May 24 13:50:31 BST 2010]; parent:
>>>> org.apache.tuscany.sca.implementation.spring.runtime.context.scaparentapplicationcont...@18782a7
>>>> - Destroying singletons in
>>>> org.springframework.beans.factory.xml.xmlbeanfact...@192d604: defining
>>>> beans [CalculatorServiceBean]; parent:
>>>> org.apache.tuscany.sca.implementation.spring.runtime.context.scaparentapplicationcont...@18782a7
>>>>
>>>>
>>>> with the password set to "abcdefg" I get...
>>>>
>>>> 24-May-2010 13:45:01 org.apache.tuscany.sca.node.impl.NodeImpl <init>
>>>> INFO: Creating node: Calculator.composite
>>>> 24-May-2010 13:45:01 org.apache.tuscany.sca.node.impl.NodeImpl 
>>>> configureNode
>>>> INFO: Loading contribution:
>>>> file:/D:/sca-java-1.x/samples/calculator/target/classes/
>>>> 24-May-2010 13:45:02 org.apache.tuscany.sca.node.impl.NodeImpl start
>>>> INFO: Starting node: Calculator.composite
>>>> - Loading XML bean definitions from URL
>>>> [file:/D:/sca-java-1.x/samples/calculator/target/classes/META-INF/spring/CalculatorService-context.xml]
>>>> - Module validation failed: The system is attempting to engage a
>>>> module that is not available: rampart
>>>> - Refreshing 
>>>> org.apache.tuscany.sca.implementation.spring.runtime.context.scagenericapplicationcont...@14a9387:
>>>> display name 
>>>> [org.apache.tuscany.sca.implementation.spring.runtime.context.scagenericapplicationcont...@14a9387];
>>>> startup date [Mon May 24 13:45:03 BST 2010]; parent:
>>>> org.apache.tuscany.sca.implementation.spring.runtime.context.scaparentapplicationcont...@18782a7
>>>> - Bean factory for application context
>>>> [org.apache.tuscany.sca.implementation.spring.runtime.context.scagenericapplicationcont...@14a9387]:
>>>> org.springframework.beans.factory.xml.xmlbeanfact...@192d604
>>>> Spring parent context - containsBean called for name: loadTimeWeaver
>>>> - Pre-instantiating singletons in
>>>> org.springframework.beans.factory.xml.xmlbeanfact...@192d604: defining
>>>> beans [CalculatorServiceBean]; parent:
>>>> org.apache.tuscany.sca.implementation.spring.runtime.context.scaparentapplicationcont...@18782a7
>>>> Spring parent context - getBean called for name: addService
>>>> Spring parent context - getBean called for name: subtractService
>>>> Spring parent context - getBean called for name: multiplyService
>>>> Spring parent context - getBean called for name: divideService
>>>> - Basic authentication scheme selected
>>>> - Failure authenticating with BASIC 'Application'@localhost:8080
>>>> - Unable to sendViaPost to
>>>> url[http://localhost:8080/sample-calculator-ws-webapp/AddServiceComponent]
>>>> org.apache.axis2.AxisFault: Transport error: 401 Error: Unauthorized
>>>>
>>>> So it seems to be basically working so my suspicion is turning to the
>>>> WSDL you have? What style is the WSDL using, by default Tuscany is
>>>> expecting to deal with Doc/Lit/Wrapped. If the external service is
>>>> doing something else we'll have to look at how the WSDL is configured.
>>>>
>>>>
>>>> Regards
>>>>
>>>> Simon
>>>>
>>>> --
>>>> Apache Tuscany committer: tuscany.apache.org
>>>> Co-author of a book about Tuscany and SCA: tuscanyinaction.com
>>>>
>>>>
>>>> The WSDL is huge. Cutting it down to the relevant parts
>>>>
>>>> <?xml version="1.0" encoding="utf-8"?>
>>>> <wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"; 
>>>> xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/"; 
>>>> xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"; 
>>>> xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"; 
>>>> xmlns:tns="http://soa.mycompany.com/webservices/"; 
>>>> xmlns:s1="http://microsoft.com/wsdl/types/"; 
>>>> xmlns:s="http://www.w3.org/2001/XMLSchema"; 
>>>> xmlns:s2="http://soa.mycompany.com/webservices/AbstractTypes"; 
>>>> xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"; 
>>>> xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"; 
>>>> targetNamespace="http://soa.mycompany.com/webservices/"; 
>>>> xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/";>
>>>>  <wsdl:types>
>>>>    <s:schema elementFormDefault="qualified" 
>>>> targetNamespace="http://soa.mycompany.com/webservices/";>
>>>>      <s:import namespace="http://microsoft.com/wsdl/types/"; />
>>>>      <s:complexType name="ArrayOfString">
>>>>        <s:sequence>
>>>>          <s:element minOccurs="0" maxOccurs="unbounded" name="string" 
>>>> nillable="true" type="s:string" />
>>>>        </s:sequence>
>>>>      </s:complexType>
>>>>      <s:simpleType name="LoginTokenType">
>>>>        <s:restriction base="s:string">
>>>>          <s:enumeration value="Unknown" />
>>>>          <s:enumeration value="SessionSecureToken" />
>>>>          <s:enumeration value="SessionHttpToken" />
>>>>          <s:enumeration value="PersistentSecureToken" />
>>>>          <s:enumeration value="PersistentHttpToken" />
>>>>        </s:restriction>
>>>>      </s:simpleType>
>>>>      <s:complexType name="WebServiceResult">
>>>>        <s:sequence>
>>>>          <s:element minOccurs="1" maxOccurs="1" name="Success" 
>>>> type="s:boolean" />
>>>>          <s:element minOccurs="0" maxOccurs="1" name="ResultStatus" 
>>>> type="s:string" />
>>>>        </s:sequence>
>>>>      </s:complexType>
>>>>      <s:element name="Login">
>>>>        <s:complexType>
>>>>          <s:sequence>
>>>>            <s:element minOccurs="0" maxOccurs="1" name="userName" 
>>>> type="s:string" />
>>>>            <s:element minOccurs="0" maxOccurs="1" name="password" 
>>>> type="s:string" />
>>>>            <s:element minOccurs="0" maxOccurs="1" name="existingTokenIds" 
>>>> type="tns:ArrayOfString" />
>>>>          </s:sequence>
>>>>        </s:complexType>
>>>>      </s:element>
>>>>      <s:element name="LoginResponse">
>>>>        <s:complexType>
>>>>          <s:sequence>
>>>>            <s:element minOccurs="0" maxOccurs="1" name="LoginResult" 
>>>> type="tns:LoginResult" />
>>>>          </s:sequence>
>>>>        </s:complexType>
>>>>      </s:element>
>>>>      <s:complexType name="LoginResult">
>>>>        <s:complexContent mixed="false">
>>>>          <s:extension base="tns:WebServiceResult">
>>>>            <s:sequence>
>>>>              <s:element minOccurs="1" maxOccurs="1" name="UserID" 
>>>> type="s1:guid" />
>>>>              <s:element minOccurs="0" maxOccurs="1" name="LoginTokens" 
>>>> type="tns:ArrayOfLoginToken" />
>>>>              <s:element minOccurs="1" maxOccurs="1" name="IsNewSplitUser" 
>>>> type="s:boolean" />
>>>>              <s:element minOccurs="0" maxOccurs="1" 
>>>> name="UserPropertyViolations" type="tns:ArrayOfString" />
>>>>            </s:sequence>
>>>>          </s:extension>
>>>>        </s:complexContent>
>>>>      </s:complexType>
>>>>      <s:complexType name="ArrayOfLoginToken">
>>>>        <s:sequence>
>>>>          <s:element minOccurs="0" maxOccurs="unbounded" name="LoginToken" 
>>>> nillable="true" type="tns:LoginToken" />
>>>>        </s:sequence>
>>>>      </s:complexType>
>>>>      <s:complexType name="LoginToken">
>>>>        <s:sequence>
>>>>          <s:element minOccurs="1" maxOccurs="1" name="TokenID" 
>>>> type="s1:guid" />
>>>>          <s:element minOccurs="1" maxOccurs="1" name="Type" 
>>>> type="tns:LoginTokenType" />
>>>>          <s:element minOccurs="1" maxOccurs="1" name="ExpirationDateUTC" 
>>>> type="s:dateTime" />
>>>>        </s:sequence>
>>>>      </s:complexType>
>>>>      <s:element name="LoginResult" nillable="true" type="tns:LoginResult" 
>>>> />
>>>>      <s:element name="LogoutResult" nillable="true" 
>>>> type="tns:LogoutResult" />
>>>>      <s:element name="string" nillable="true" type="s:string" />
>>>>    </s:schema>
>>>>    <s:schema elementFormDefault="qualified" 
>>>> targetNamespace="http://microsoft.com/wsdl/types/";>
>>>>      <s:simpleType name="guid">
>>>>        <s:restriction base="s:string">
>>>>          <s:pattern 
>>>> value="[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}"
>>>>  />
>>>>        </s:restriction>
>>>>      </s:simpleType>
>>>>    </s:schema>
>>>>    <s:schema 
>>>> targetNamespace="http://soa.mycompany.com/webservices/AbstractTypes";>
>>>>      <s:import namespace="http://schemas.xmlsoap.org/soap/encoding/"; />
>>>>      <s:complexType name="StringArray">
>>>>        <s:complexContent mixed="false">
>>>>          <s:restriction base="soapenc:Array">
>>>>            <s:sequence>
>>>>              <s:element minOccurs="0" maxOccurs="unbounded" name="String" 
>>>> type="s:string" />
>>>>            </s:sequence>
>>>>          </s:restriction>
>>>>        </s:complexContent>
>>>>      </s:complexType>
>>>>    </s:schema>
>>>>  </wsdl:types>
>>>>  <wsdl:message name="LoginSoapIn">
>>>>    <wsdl:part name="parameters" element="tns:Login" />
>>>>  </wsdl:message>
>>>>  <wsdl:message name="LoginSoapOut">
>>>>    <wsdl:part name="parameters" element="tns:LoginResponse" />
>>>>  </wsdl:message>
>>>>  <wsdl:portType name="MyModuleServiceSoap">
>>>>    <wsdl:operation name="Login">
>>>>      <wsdl:input message="tns:LoginSoapIn" />
>>>>      <wsdl:output message="tns:LoginSoapOut" />
>>>>    </wsdl:operation>
>>>>  </wsdl:portType>
>>>>  <wsdl:binding name="MyModuleServiceSoap" type="tns:MyModuleServiceSoap">
>>>>    <soap:binding transport="http://schemas.xmlsoap.org/soap/http"; />
>>>>    <wsdl:operation name="Login">
>>>>      <soap:operation 
>>>> soapAction="http://soa.mycompany.com/webservices/Login"; style="document" />
>>>>      <wsdl:input>
>>>>        <soap:body use="literal" />
>>>>      </wsdl:input>
>>>>      <wsdl:output>
>>>>        <soap:body use="literal" />
>>>>      </wsdl:output>
>>>>    </wsdl:operation>
>>>>  </wsdl:binding>
>>>>  <wsdl:service name="MyModuleService">
>>>>    <wsdl:port name="MyModuleServiceSoap" binding="tns:MyModuleServiceSoap">
>>>>      <soap:address 
>>>> location="http://soa.0002.dev.mycompany.com/MyModuleFacility/MyModuleService.asmx";
>>>>  />
>>>>    </wsdl:port>
>>>>  </wsdl:service>
>>>> </wsdl:definitions>
>>>>
>>>
>>> On the face of it that looks OK. Can you tell if the IOOB was on the
>>> request or the response?  Do you still have the full stack trace?
>>>
>>> Simon
>>>
>>> --
>>> Apache Tuscany committer: tuscany.apache.org
>>> Co-author of a book about Tuscany and SCA: tuscanyinaction.com
>>>
>>> It was on the request. Full stack below. Version 1.6 Remember, I noted that 
>>> the OMElementWrapperHandler class changed in 2.
>>>
>>> org.apache.axis2.AxisFault: 1
>>>        at org.apache.axis2.AxisFault.makeFault(AxisFault.java:430)
>>>        at 
>>> org.apache.tuscany.sca.binding.ws.axis2.Axis2ServiceInOutSyncMessageReceiver.invokeBusinessLogic(Axis2ServiceInOutSyncMessageReceiver.java:94)
>>>        at 
>>> org.apache.axis2.receivers.AbstractInOutSyncMessageReceiver.invokeBusinessLogic(AbstractInOutSyncMessageReceiver.java:42)
>>>        at 
>>> org.apache.axis2.receivers.AbstractMessageReceiver.receive(AbstractMessageReceiver.java:100)
>>>        at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:176)
>>>        at 
>>> org.apache.axis2.transport.http.HTTPTransportUtils.processHTTPPostRequest(HTTPTransportUtils.java:275)
>>>        at 
>>> org.apache.axis2.transport.http.AxisServlet.doPost(AxisServlet.java:133)
>>>        at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
>>>        at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
>>>        at 
>>> org.apache.tuscany.sca.host.webapp.WebAppRequestDispatcher.forward(WebAppRequestDispatcher.java:107)
>>>        at 
>>> org.apache.tuscany.sca.host.webapp.TuscanyServletFilter.doFilter(TuscanyServletFilter.java:94)
>>>        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:233)
>>>        at 
>>> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
>>>        at 
>>> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
>>>        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:298)
>>>        at 
>>> org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)
>>>        at 
>>> org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
>>>        at 
>>> org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
>>>        at java.lang.Thread.run(Unknown Source)
>>> Caused by: java.lang.ArrayIndexOutOfBoundsException: 1
>>>        at 
>>> org.apache.tuscany.sca.databinding.axiom.OMElementWrapperHandler.setChildren(OMElementWrapperHandler.java:76)
>>>        at 
>>> org.apache.tuscany.sca.databinding.axiom.OMElementWrapperHandler.setChildren(OMElementWrapperHandler.java:48)
>>>        at 
>>> org.apache.tuscany.sca.core.databinding.transformers.Input2InputTransformer.transform(Input2InputTransformer.java:206)
>>>        at 
>>> org.apache.tuscany.sca.core.databinding.transformers.Input2InputTransformer.transform(Input2InputTransformer.java:45)
>>>        at 
>>> org.apache.tuscany.sca.databinding.impl.MediatorImpl.mediate(MediatorImpl.java:113)
>>>        at 
>>> org.apache.tuscany.sca.databinding.impl.MediatorImpl.mediateInput(MediatorImpl.java:431)
>>>        at 
>>> org.apache.tuscany.sca.core.databinding.wire.DataTransformationInterceptor.invoke(DataTransformationInterceptor.java:65)
>>>        at 
>>> org.apache.tuscany.sca.core.invocation.JDKInvocationHandler.invoke(JDKInvocationHandler.java:349)
>>>        at 
>>> org.apache.tuscany.sca.core.invocation.JDKInvocationHandler.invoke(JDKInvocationHandler.java:193)
>>>        at $Proxy24.Login(Unknown Source)
>>>        at 
>>> com.mycompany.myproduct.authentication.impl.DefaultImplementation.doFoo(DefaultImplementation.java:22)
>>>        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>>        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
>>>        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
>>>        at java.lang.reflect.Method.invoke(Unknown Source)
>>>        at 
>>> org.apache.tuscany.sca.implementation.spring.invocation.SpringInvoker.doInvoke(SpringInvoker.java:97)
>>>        at 
>>> org.apache.tuscany.sca.implementation.spring.invocation.SpringInvoker.invoke(SpringInvoker.java:113)
>>>        at 
>>> org.apache.tuscany.sca.core.databinding.wire.DataTransformationInterceptor.invoke(DataTransformationInterceptor.java:67)
>>>        at 
>>> org.apache.tuscany.sca.policy.authentication.basic.BasicAuthenticationServicePolicyInterceptor.invoke(BasicAuthenticationServicePolicyInterceptor.java:82)
>>>        at 
>>> org.apache.tuscany.sca.core.invocation.RuntimeWireInvoker.invoke(RuntimeWireInvoker.java:129)
>>>        at 
>>> org.apache.tuscany.sca.core.invocation.RuntimeWireInvoker.invoke(RuntimeWireInvoker.java:104)
>>>        at 
>>> org.apache.tuscany.sca.core.invocation.RuntimeWireInvoker.invoke(RuntimeWireInvoker.java:98)
>>>        at 
>>> org.apache.tuscany.sca.core.assembly.RuntimeWireImpl.invoke(RuntimeWireImpl.java:173)
>>>        at 
>>> org.apache.tuscany.sca.binding.ws.axis2.Axis2ServiceProvider.invokeTarget(Axis2ServiceProvider.java:766)
>>>        at 
>>> org.apache.tuscany.sca.binding.ws.axis2.Axis2ServiceInOutSyncMessageReceiver.invokeBusinessLogic(Axis2ServiceInOutSyncMessageReceiver.java:70)
>>>
>>
>> Ok, so it is getting through basic authentication and, as you say,
>> failing on the transformation going out to the external service. If
>> you take out the definitions.xml file then it will fail on the basic
>> authentication and won't get as far as calling the external service
>> hence no IOOB in that case.
>>
>> How did you generate the interface that contains the Login operation
>> from the WSDL? I'll see if I can mock it up here as see if I can see
>> what's going wrong with the wrapping.
>>
>> Simon
>>
>> --
>> Apache Tuscany committer: tuscany.apache.org
>> Co-author of a book about Tuscany and SCA: tuscanyinaction.com
>>
>> Did a straightforward wsdl2java from Axis 2 on the WSDL using the below 
>> command line, then included the generated source in the project, and hooked 
>> it up.
>>
>> C:\axis2-1.5.1\bin>wsdl2java -o c:\temp\wsdl2java -ss -ssi -uri 
>> c:\temp\wsdl2java\MyService.wsdl
>>
>
> Hi Gregor
>
> I ran the same command on the WSDL and set up a small test using the
> generated Java. I had to manually
>
> - add @Remotable to the generated MyModuleServiceSkeletonInterface
> interface as I'm using it with binding.ws
> - add a default constructor to LoginTokenType as the JAX-WS WSDL gen
> that we use inside Tuscany expects it to have one
>
> I created a very simple test based on our calculator sample.
>
> Composite (I added testRef)
> ====================
>
>    <component name="CalculatorServiceComponent">
>                <implementation.java class="calculator.CalculatorServiceImpl"/>
>        <!--implementation.spring
> location="META-INF/spring/CalculatorService-context.xml"/-->
>        <reference name="testRef">
>            <binding.ws
> uri="http://localhost:8080/sample-calculator-ws-webapp/AddServiceComponent"/>
>        </reference>
>        <reference name="addService" >
>           <interface.java interface="calculator.AddService" />
>            <binding.ws requires="authentication"
> uri="http://localhost:8080/sample-calculator-ws-webapp/AddServiceComponent"/>
>        </reference>
>        <reference name="subtractService" target="SubtractServiceComponent" />
>        <reference name="multiplyService" target="MultiplyServiceComponent" />
>        <reference name="divideService" target="DivideServiceComponent" />
>    </component>
>
> Implementation ( I extended the calculator's add method)
> =========================================
>
>    public double add(double n1, double n2) {
>
>        ArrayOfString existingTokens = new ArrayOfString();
>        existingTokens.addString("XYZ");
>        existingTokens.addString("ABC");
>
>        Login login = new Login();
>        login.setUserName("SomeUser");
>        login.setPassword("SomePassword");
>        login.setExistingTokenIds(existingTokens);
>
>        testRef.login(login);
>
>        return addService.add(n1, n2);
>    }
>
> Result
> =====
>
> The web services binding generates the following message on the wire
>
>
> POST /sample-calculator-ws-webapp/AddServiceComponent HTTP/1.1
> Content-Type: text/xml; charset=UTF-8
> SOAPAction: ""
> User-Agent: Axis2
> Host: localhost:8080
> Content-Length: 387
>
> <?xml version='1.0' encoding='UTF-8'?>
> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/";>
>  <soapenv:Body>
>    <ns2:login xmlns:ns2="http://webservices.soa.mycompany.com/";>
>      <arg0>
>          <existingTokenIds>
>             <string>XYZ</string>
>            <string>ABC</string>
>         </existingTokenIds>
>         <password>SomePassword</password>
>         <userName>SomeUser</userName>
>      </arg0>
>    </ns2:login>
>  </soapenv:Body>
> </soapenv:Envelope>
>
> Where <arg0> represents the login object that's passed in.
>
> To take a step closer to your composite I changed mine to configure
> the web service binding with the WSDL directly.
>
> Composite (I just changed the reference)
> =============================
>
>        <reference name="testRef">
>            <binding.ws
> wsdlElement="http://soa.mycompany.com/webservices/#wsdl.port(MyModuleService/MyModuleServiceSoap)"/>
>        </reference>
>
> Result
> =====
>
> I had to mess about fixing the name of the Axis generated interface
> (to MyModuleServiceSOAP.java) as JAX-WS has some expectations. Also
> the name of the operation in the WSDL was "Login" and Axis generated
> an operation called "login".  Tuscany picks up on this incompatibility
> and complains so I went back and fixed the WSDL for simplicity
> although in reality I should have fixed the generated Java.
>
> Again a message appeared on the wire
>
> POST /MyModuleFacility/MyModuleService.asmx HTTP/1.1
> Content-Type: text/xml; charset=UTF-8
> SOAPAction: "http://soa.mycompany.com/webservices/Login";
> User-Agent: Axis2
> Host: localhost:8080
> Content-Length: 495
>
> <?xml version='1.0' encoding='UTF-8'?>
> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/";>
>   <soapenv:Body>
>       <ns3:Login xmlns:ns2="http://webservices.soa.mycompany.com/";
>                        xmlns:ns3="http://soa.mycompany.com/webservices/";
>                        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
>                        xsi:type="login">
>          <existingTokenIds>
>              <string>XYZ</string>
>             <string>ABC</string>
>          </existingTokenIds>
>          <password>SomePassword</password>
>          <userName>SomeUser</userName>
>        </ns3:Login>
>     </soapenv:Body>
> </soapenv:Envelope>
>
> Note no <arg0> this time. Seems to be document literal but not
> wrapped. Also the xsi:type looks wrong. Not sure why this is
> happening.
>
> Next I added the authentication intent to the reference.
>
> Composite (I just changed the reference)
> =============================
>
>        <reference name="testRef">
>            <binding.ws
> wsdlElement="http://soa.mycompany.com/webservices/#wsdl.port(MyModuleService/MyModuleServiceSoap)"
> requires="authentication"/>
>        </reference>
>
> Result
> =====
>
> Again a message in the wire
>
> POST /MyModuleFacility/MyModuleService.asmx HTTP/1.1
> Content-Type: text/xml; charset=UTF-8
> SOAPAction: "http://soa.mycompany.com/webservices/Login";
> User-Agent: Axis2
> Authorization: Basic dHVzY2FueXVzZXI6dHVzY2FueXB3ZA==
> Host: localhost:8080
> Content-Length: 495
>
> <?xml version='1.0' encoding='UTF-8'?>
>    <soapenv:Envelope 
> xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/";>
>    <soapenv:Body>
>         <ns3:Login xmlns:ns3="http://soa.mycompany.com/webservices/";
>                         xmlns:ns2="http://webservices.soa.mycompany.com/";
>                         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
>                        xsi:type="login">
>             <existingTokenIds>
>                    <string>XYZ</string>
>                    <string>ABC</string>
>             </existingTokenIds>
>             <password>SomePassword</password>
>             <userName>SomeUser</userName>
>        </ns3:Login>
>    </soapenv:Body>
> </soapenv:Envelope>
>
> So the same as the previous case but with the "Authorization:" header
> obviously.
>
> The long and short of it is that I'm not sure why I'm not seeing the
> error you're seeing (I am running on the trunk code rather than the
> 1.6 release) however the difference in results when the WSDL is
> attached compared to when the no WSDL is attached to the binding is
> problematic. Can you re-run the test without the "wsdlElement"
> attribute on binding.ws and see what happens.
>
> Thanks
>
> Simon
> --
> Apache Tuscany committer: tuscany.apache.org
> Co-author of a book about Tuscany and SCA: tuscanyinaction.com
>
> You've followed all the steps I did (though I changed the Java rather than 
> the WSDL ;) )
>
> Taking the wsdlElement off the binding gives me the following error with both 
> the true WSDL and the chopped down (but not anonymised) one.
>
> org.apache.axis2.AxisFault: The system cannot infer the transport information 
> from the / URL.
>        at 
> org.apache.axis2.description.ClientUtils.inferOutTransport(ClientUtils.java:82)
>        at 
> org.apache.axis2.client.OperationClient.prepareMessageContext(OperationClient.java:302)
>        at 
> org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:179)
>        at 
> org.apache.axis2.client.OperationClient.execute(OperationClient.java:163)
>        at 
> org.apache.tuscany.sca.binding.ws.axis2.Axis2BindingInvoker$1.run(Axis2BindingInvoker.java:172)
>        at java.security.AccessController.doPrivileged(Native Method)
>        at 
> org.apache.tuscany.sca.binding.ws.axis2.Axis2BindingInvoker.invokeTarget(Axis2BindingInvoker.java:170)
>        at 
> org.apache.tuscany.sca.binding.ws.axis2.Axis2BindingInvoker.invoke(Axis2BindingInvoker.java:124)
>        at 
> org.apache.tuscany.sca.policy.authentication.basic.BasicAuthenticationReferencePolicyInterceptor.invoke(BasicAuthenticationReferencePolicyInterceptor.java:85)
>        at 
> org.apache.tuscany.sca.core.databinding.wire.DataTransformationInterceptor.invoke(DataTransformationInterceptor.java:67)
>

Did you add the uri of the target service to the binding? For example,

       <reference name="testRef">
           <binding.ws
uri="http://localhost:8080/sample-calculator-ws-webapp/AddServiceComponent"/>
       </reference>

Simon
-- 
Apache Tuscany committer: tuscany.apache.org
Co-author of a book about Tuscany and SCA: tuscanyinaction.com

Looks like it can't find the SoapAction without it.


org.apache.axis2.AxisFault: Server did not recognize the value of HTTP Header 
SOAPAction: .
        at 
org.apache.axis2.util.Utils.getInboundFaultFromMessageContext(Utils.java:512)
        at 
org.apache.axis2.description.OutInAxisOperationClient.handleResponse(OutInAxisOperation.java:370)
        at 
org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:416)
        at 
org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:228)
        at 
org.apache.axis2.client.OperationClient.execute(OperationClient.java:163)
        at 
org.apache.tuscany.sca.binding.ws.axis2.Axis2BindingInvoker$1.run(Axis2BindingInvoker.java:172)
        at java.security.AccessController.doPrivileged(Native Method)
        at 
org.apache.tuscany.sca.binding.ws.axis2.Axis2BindingInvoker.invokeTarget(Axis2BindingInvoker.java:170)
        at 
org.apache.tuscany.sca.binding.ws.axis2.Axis2BindingInvoker.invoke(Axis2BindingInvoker.java:124)
        at 
org.apache.tuscany.sca.policy.authentication.basic.BasicAuthenticationReferencePolicyInterceptor.invoke(BasicAuthenticationReferencePolicyInterceptor.java:85)
        at 
org.apache.tuscany.sca.core.databinding.wire.DataTransformationInterceptor.invoke(DataTransformationInterceptor.java:67)

Reply via email to