On Mon, May 24, 2010 at 2:40 PM, Gregor Kiddie
<gregor.kid...@channeladvisor.com> wrote:
>
>
> -----Original Message-----
> From: Simon Laws [mailto:simonsl...@googlemail.com]
> Sent: 24 May 2010 13:54
> To: user@tuscany.apache.org
> Subject: Re: Exception with security (again)
>
> On Mon, May 24, 2010 at 11:03 AM, Gregor Kiddie
> <gregor.kid...@channeladvisor.com> wrote:
>>
>>
>> -----Original Message-----
>> From: Simon Laws [mailto:simonsl...@googlemail.com]
>> Sent: 24 May 2010 09:54
>> To: user@tuscany.apache.org
>> Subject: Re: Exception with security (again)
>>
>> On Fri, May 21, 2010 at 8:17 PM, Gregor Kiddie
>> <gregor.kid...@channeladvisor.com> 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

Reply via email to