ConversationID is not set correctly when using Conversational with WS
---------------------------------------------------------------------
Key: TUSCANY-1854
URL: https://issues.apache.org/jira/browse/TUSCANY-1854
Project: Tuscany
Issue Type: Bug
Affects Versions: Java-SCA-1.0
Environment: Windows XP
Reporter: bjoern
When unsing the @Conversational with webservices on serverside the
@conversationID is not filled with the vlaue of the SOAP-Header but is filled
with a newly generated.
The information from the User-List I collected with Simon:
Hi,
I logged the SOAP messages that go form the WS-Client to the WS-Server and I
found out something strange:
On client-side a ConverstionID is generated
(5756de5a-904e-4834-aaf4-6249d74b702e) and passed using the SOAP-header To the
server-side. I expected that the anootated variable
> @ConversationID
> public String lConversationID;
Is filled with this value (5756de5a-904e-4834-aaf4-6249d74b702e) but it seams
to get a differend id (194e6a05-8b80-42e4-a380-5e43fffcdb14).
As long as the conversation is up the ID send by the client stays the same
(5756de5a-904e-4834-aaf4-6249d74b702e) but on server side I get a differend ID
for every call.
SOAP LOGFILE:
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header>
<To xmlns="http://www.w3.org/2005/08/addressing">
<wsa:Address
xmlns:wsa="http://www.w3.org/2005/08/addressing">
http://localhost:8082/SOULSessionService
</wsa:Address>
<wsa:ReferenceParameters
xmlns:wsa="http://www.w3.org/2005/08/addressing">
<axis2ns1:ConversationID
xmlns:axis2ns1="http://tuscany.apache.org/xmlns/sca/1.0">
5756de5a-904e-4834-aaf4-6249d74b702e
</axis2ns1:ConversationID>
</wsa:ReferenceParameters>
</To>
</soapenv:Header>
<soapenv:Body>
<_ns_:getSessionID
xmlns:_ns_="http://SOULSessionService">
<_ns_:getName></_ns_:getName>
</_ns_:getSessionID>
</soapenv:Body>
</soapenv:Envelope>
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<_ns_:getSessionIDResponse
xmlns:_ns_="http://SOULSessionService">
<_ns_:getNameReturn>
194e6a05-8b80-42e4-a380-5e43fffcdb14
</_ns_:getNameReturn>
</_ns_:getSessionIDResponse>
</soapenv:Body>
</soapenv:Envelope>
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header>
<To xmlns="http://www.w3.org/2005/08/addressing">
<wsa:Address
xmlns:wsa="http://www.w3.org/2005/08/addressing">
http://localhost:8082/SOULSessionService
</wsa:Address>
<wsa:ReferenceParameters
xmlns:wsa="http://www.w3.org/2005/08/addressing">
<axis2ns2:ConversationID
xmlns:axis2ns2="http://tuscany.apache.org/xmlns/sca/1.0">
5756de5a-904e-4834-aaf4-6249d74b702e
</axis2ns2:ConversationID>
</wsa:ReferenceParameters>
</To>
</soapenv:Header>
<soapenv:Body>
<_ns_:getSessionID
xmlns:_ns_="http://SOULSessionService">
<_ns_:getName></_ns_:getName>
</_ns_:getSessionID>
</soapenv:Body>
</soapenv:Envelope>
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<_ns_:getSessionIDResponse
xmlns:_ns_="http://SOULSessionService">
<_ns_:getNameReturn>
4002d850-bc7c-47b0-b866-99d1f3bfdfad
</_ns_:getNameReturn>
</_ns_:getSessionIDResponse>
</soapenv:Body>
</soapenv:Envelope>
Greetings
Björn
-----Ursprüngliche Nachricht-----
Von: Simon Laws [mailto:[EMAIL PROTECTED]
Gesendet: Dienstag, 16. Oktober 2007 18:38
An: [EMAIL PROTECTED]
Betreff: Re: Problems with Conversational and Webservices
On 10/16/07, Dietrich, Björn <[EMAIL PROTECTED]> wrote:
>
> Hi,
>
> I have a problem with coversational and webservice binding.
> I have a Service which is conversational and uses the @ConversationID
> to get a ConversationID. I have a function getSessionID to read this
> conversationID.
> I use this function to get the ID on client-side and print it out.
>
> With POJO-binding the ConversationID stays the same no mather how
> often I call the getSessionID.
>
> SOULSessionServiceClient.composite
>
> <composite xmlns=http://www.osoa.org/xmlns/sca/1.0 targetNamespace=
> http://SOULSessionServicexmlns:hw="http://SOULSessionService"
> name="SOULSessionServiceClient">
>
> <component name="SOULSessionServiceClient">
>
> <implementation.java class="
> de.cenit.SOUL.ServiceRuntime.SOULSessionService" />
>
> </component>
>
> </composite>
>
>
> OUTPUT:
> SOULSESSIONSERVICECALLED:fc7e8541-b164-4cb7-af41-11a69a082a07
>
> GETSTATE
>
> Called getSessionID
>
> SessionID:fc7e8541-b164-4cb7-af41-11a69a082a07
>
> SOULSESSIONSERVICECALLED:fc7e8541-b164-4cb7-af41-11a69a082a07
>
> Called getSessionID
>
> SessionID:fc7e8541-b164-4cb7-af41-11a69a082a07
>
>
>
> If I use the same client with WebService-binding I get a different
> ConversationID for each call.
>
>
>
> <composite xmlns=http://www.osoa.org/xmlns/sca/1.0 <
> http://www.osoa.org/xmlns/sca/1.0> targetNamespace=
> http://SOULSessionService <http://SOULSessionService> xmlns:hw="
> http://SOULSessionService" name="SOULSessionServiceClient">
>
> <component name="SOULSessionServiceClient">
>
> <implementation.java class="
> de.cenit.SOUL.ServiceRuntime.SOULSessionServiceComponent" />
>
> </component>
>
> <reference name="SOULSessionService"
> promote="SOULSessionServiceClient/helloWorldService">
>
> <interface.java interface="
> de.cenit.SOUL.ServiceRuntime.SOULSessionServiceComponent" />
>
> <binding.ws wsdlElement="
> http://SOULSessionService#wsdl.port(HelloWorldService/HelloWorldSoapPort)"
> />
>
> </reference>
>
> </composite>
>
> OUTPUT:
>
> GETSTATE
>
> Called getSessionID
>
> SessionID:ff70883f-4441-447e-9b40-7d47052a69d9
>
> Called getSessionID
>
> SessionID:eacfebd2-6e27-4747-aefe-c2be119efa33
>
>
>
> Service Interface:
> @Remotable
>
> @Service
>
> @Conversational
>
> //@Scope("CONVERSATION")
>
> public interface ISOULSessionService extends ISOULService {
>
> //public String exec(String name);
>
> public String getName(String name);
>
> //public String exec(SOULParameters name);
>
> //public String exec(DataObject name);
>
>
>
> public String getSessionID(String name);
>
>
>
> public DataObject exec(DataObject name) throws SOULException;
>
>
>
> public DataObject storeState(DataObject pObject);
>
>
>
> public DataObject getState(DataObject pObject) ;
>
> }
>
>
>
>
>
> Service Implementation:
>
> @Scope("CONVERSATION")
> @Service(ISOULSessionService.class)
> public class SOULSessionService implements ISOULSessionService {
>
>
> @ConversationID
> public String lConversationID;
>
>
>
> public SOULSessionService()
> {
>
> }
> public String getName(String name)
> {
> System.out.println("ConverstationID:"+lConversationID);
> return "de.cenit.SOUL.ServiceRuntime.SOULSessionService
> ";//this.getClass().toString();
> }
>
> public DataObject exec(DataObject name) {
> System.out.println("SOULSESSIONSERVICECALLED:"+lConversationID);
> return name;
> }
>
>
> public String getSessionID(String name) {
> System.out.println("Called getSessionID");
> return lConversationID;
> }
>
>
>
> }
>
>
>
>
> WSDL-file:
>
>
>
> <?xml version="1.0" encoding="UTF-8"?>
>
> <!--
>
> * Licensed to the Apache Software Foundation (ASF) under one
>
> * or more contributor license agreements. See the NOTICE file
>
> * distributed with this work for additional information
>
> * regarding copyright ownership. The ASF licenses this file
>
> * to you under the Apache License, Version 2.0 (the
>
> * "License"); you may not use this file except in compliance
>
> * with the License. You may obtain a copy of the License at
>
> *
>
> * http://www.apache.org/licenses/LICENSE-2.0
>
> *
>
> * Unless required by applicable law or agreed to in writing,
>
> * software distributed under the License is distributed on an
>
> * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
>
> * KIND, either express or implied. See the License for the
>
> * specific language governing permissions and limitations
>
> * under the License.
>
> -->
>
> <wsdl:definitions targetNamespace="http://SOULSessionService" xmlns:tns="
> http://SOULSessionService"
>
> xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsdlsoap="
> http://schemas.xmlsoap.org/wsdl/soap/"
>
> xmlns:xsd="http://www.w3.org/2001/XMLSchema"
>
> xmlns:ns0="http://de_cenit_SOUL_ServiceRuntime"
>
> xmlns:ns1="http://de_cenit_SOUL_ServiceRuntime/xsd"
>
> xmlns:sca="http://www.osoa.org/xmlns/sca/1.0"
>
> name="SOULSessionService">
>
> <wsdl:types>
>
> <schema elementFormDefault="qualified" targetNamespace="
> http://SOULSessionService"
>
> xmlns="http://www.w3.org/2001/XMLSchema">
>
>
>
> <complexType name="Exception">
>
> <sequence>
>
> <element minOccurs="0" name="Exception" nillable="true"
> type="xsd:anyType"/>
>
> </sequence>
>
> </complexType>
>
> <element name="SOULException">
>
> <complexType>
>
> <sequence>
>
> <element minOccurs="0" name="SOULException" nillable="true"
> type="ns1:SOULException"/>
>
> </sequence>
>
> </complexType>
>
> </element>
>
> <element name="exec">
>
> <complexType>
>
> <sequence>
>
> <element name="name" type="xsd:anyType" />
>
> </sequence>
>
> </complexType>
>
> </element>
>
> <element name="execResponse">
>
> <complexType>
>
> <sequence>
>
> <element name="execReturn" type="xsd:anyType" />
>
> </sequence>
>
> </complexType>
>
> </element>
>
>
>
> <element name="getName">
>
> <complexType>
>
> <sequence>
>
> <element name="getName" type="xsd:string" />
>
> </sequence>
>
> </complexType>
>
> </element>
>
> <element name="getNameResponse">
>
> <complexType>
>
> <sequence>
>
> <element name="getNameReturn" type="xsd:string" />
>
> </sequence>
>
> </complexType>
>
> </element>
>
> <element name="getSessionID">
>
> <complexType>
>
> <sequence>
>
> <element name="getName" type="xsd:string" />
>
> </sequence>
>
> </complexType>
>
> </element>
>
> <element name="getSessionIDResponse">
>
> <complexType>
>
> <sequence>
>
> <element name="getNameReturn" type="xsd:string" />
>
> </sequence>
>
> </complexType>
>
> </element>
>
> <element name="getState">
>
> <complexType>
>
> <sequence>
>
> <element name="getState" type="xsd:anyType" />
>
> </sequence>
>
> </complexType>
>
> </element>
>
> <element name="getStateResponse">
>
> <complexType>
>
> <sequence>
>
> <element name="execReturn" type="xsd:anyType" />
>
> </sequence>
>
> </complexType>
>
> </element>
>
> <element name="storeState">
>
> <complexType>
>
> <sequence>
>
> <element name="name" type="xsd:anyType" />
>
> </sequence>
>
> </complexType>
>
> </element>
>
> <element name="storeStateResponse">
>
> <complexType>
>
> <sequence>
>
> <element name="execReturn" type="xsd:anyType" />
>
> </sequence>
>
> </complexType>
>
> </element>
>
> <!-- NOT NEEDED -->
>
> <complexType name="Name">
>
> <sequence>
>
> <element name="first" type="xsd:anyType" />
>
> <element name="last" type="xsd:string" />
>
> </sequence>
>
> </complexType>
>
> <xsd:complexType name="LogonDataType">
>
> <xsd:sequence>
>
> <xsd:element name="Field"
>
> type="tns:LogonDataFieldType" maxOccurs="unbounded" />
>
> </xsd:sequence>
>
> <xsd:attribute name="SystemID" type="xsd:string" />
>
> </xsd:complexType>
>
> <xsd:complexType name="LogonDataFieldType">
>
> <xsd:attribute name="key" type="xsd:string" />
>
> <xsd:attribute name="value" type="xsd:string" />
>
> </xsd:complexType>
>
> </schema>
>
> <schema elementFormDefault="qualified" targetNamespace="
> http://de_cenit_SOUL_ServiceRuntime"
>
> xmlns="http://www.w3.org/2001/XMLSchema">
>
>
>
> <complexType name="Exception">
>
> <sequence>
>
> <element minOccurs="0" name="Exception" nillable="true"
> type="xsd:anyType"/>
>
> </sequence>
>
> </complexType>
>
> <element name="SOULException">
>
> <complexType>
>
> <sequence>
>
> <element minOccurs="0" name="SOULException" nillable="true"
> type="ns1:SOULException"/>
>
> </sequence>
>
> </complexType>
>
> </element>
>
> </schema>
>
> <schema xmlns:ax21="http://de_cenit_SOUL_ServiceRuntime/xsd"
> attributeFormDefault="qualified" elementFormDefault="qualified"
> targetNamespace="http://de_cenit_SOUL_ServiceRuntime/xsd" xmlns="
> http://www.w3.org/2001/XMLSchema">
>
> <complexType name="SOULException">
>
> <complexContent>
>
> <extension base="ns0:Exception">
>
> <sequence/>
>
> </extension>
>
> </complexContent>
>
> </complexType>
>
> </schema>
>
> </wsdl:types>
>
> <wsdl:message name="execRequest">
>
> <wsdl:part element="tns:exec" name="parameters" />
>
> </wsdl:message>
>
> <wsdl:message name="execResponse">
>
> <wsdl:part element="tns:execResponse" name="parameters" />
>
> </wsdl:message>
>
>
>
> <wsdl:message name="getNameRequest">
>
> <wsdl:part element="tns:getName" name="parameters" />
>
> </wsdl:message>
>
> <wsdl:message name="getNameResponse">
>
> <wsdl:part element="tns:getNameResponse" name="parameters" />
>
> </wsdl:message>
>
> <wsdl:message name="getSessionIDRequest">
>
> <wsdl:part element="tns:getSessionID" name="parameters" />
>
> </wsdl:message>
>
> <wsdl:message name="getSessionIDResponse">
>
> <wsdl:part element="tns:getSessionIDResponse" name="parameters" />
>
> </wsdl:message>
>
> <wsdl:message name="SOULException">
>
> <wsdl:part name="parameters" element="ns0:SOULException"/>
>
> </wsdl:message>
>
> <wsdl:message name="getStateRequest">
>
> <wsdl:part name="parameters" element="tns:getState" />
>
> </wsdl:message>
>
> <wsdl:message name="getStateResponse">
>
> <wsdl:part name="paparametersrt1" element="tns:getStateResponse" />
>
> </wsdl:message>
>
>
>
> <wsdl:message name="storeState">
>
> <wsdl:part name="parameters" element="tns:storeState" />
>
> </wsdl:message>
>
> <wsdl:message name="storeStateResponse">
>
> <wsdl:part name="parameters" element="tns:storeStateResponse" />
>
> </wsdl:message>
>
> <wsdl:portType name="HelloWorld" sca:requires="conversational">
>
> <wsdl:operation name="exec">
>
> <wsdl:input message="tns:execRequest" name="execRequest" />
>
> <wsdl:output message="tns:execResponse" name="execResponse" />
>
> <wsdl:fault message="tns:SOULException" name="SOULException"/>
>
> </wsdl:operation>
>
> <wsdl:operation name="getName">
>
> <wsdl:input message="tns:getNameRequest" name="getNameRequest" />
>
> <wsdl:output message="tns:getNameResponse" name="getNameResponse" />
>
> </wsdl:operation>
>
> <wsdl:operation name="getSessionID">
>
> <wsdl:input message="tns:getSessionIDRequest" name="getSessionIDRequest"
> />
>
> <wsdl:output message="tns:getSessionIDResponse"
> name="getSessionIDResponse" />
>
> </wsdl:operation>
>
> <wsdl:operation name="getState">
>
> <wsdl:input message="tns:getStateRequest" name="getStateRequest"/>
>
> <wsdl:output message="tns:getStateResponse" name="getStateResponse" />
>
> </wsdl:operation>
>
> <wsdl:operation name="storeState">
>
> <wsdl:input message="tns:storeStateRequest" name="storeStateRequest"/>
>
> <wsdl:output message="tns:storeStateResponse"
> name="storeStateResponse" />
>
> </wsdl:operation>
>
> </wsdl:portType>
>
> <wsdl:binding name="HelloWorldSoapBinding" type="tns:HelloWorld">
>
> <wsdlsoap:binding style="document" transport="
> http://schemas.xmlsoap.org/soap/http" />
>
> <wsdl:operation name="exec">
>
> <wsdlsoap:operation soapAction="" />
>
> <wsdl:input name="execRequest">
>
> <wsdlsoap:body use="literal" />
>
> </wsdl:input>
>
> <wsdl:output name="execResponse">
>
> <wsdlsoap:body use="literal" />
>
> </wsdl:output>
>
> <wsdl:fault name="SOULException">
>
> <wsdlsoap:fault use="literal" name="SOULException"/>
>
> </wsdl:fault>
>
> </wsdl:operation>
>
> <wsdl:operation name="getName">
>
> <wsdlsoap:operation soapAction="" />
>
> <wsdl:input name="getNameRequest">
>
> <wsdlsoap:body use="literal" />
>
> </wsdl:input>
>
> <wsdl:output name="getNameResponse">
>
> <wsdlsoap:body use="literal" />
>
> </wsdl:output>
>
> </wsdl:operation>
>
> <wsdl:operation name="getSessionID">
>
> <wsdlsoap:operation soapAction="" />
>
> <wsdl:input name="getSessionIDRequest">
>
> <wsdlsoap:body use="literal" />
>
> </wsdl:input>
>
> <wsdl:output name="getSessionIDResponse">
>
> <wsdlsoap:body use="literal" />
>
> </wsdl:output>
>
> </wsdl:operation>
>
> <wsdl:operation name="getState">
>
> <wsdlsoap:operation soapAction="" />
>
> <wsdl:input name="getStateRequest">
>
> <wsdlsoap:body use="literal" />
>
> </wsdl:input>
>
> <wsdl:output name="getStateResponse">
>
> <wsdlsoap:body use="literal" />
>
> </wsdl:output>
>
> </wsdl:operation>
>
> <wsdl:operation name="storeState">
>
> <wsdlsoap:operation soapAction="" />
>
> <wsdl:input name="storeStateRequest">
>
> <wsdlsoap:body use="literal" />
>
> </wsdl:input>
>
> <wsdl:output name="storeStateResponse">
>
> <wsdlsoap:body use="literal" />
>
> </wsdl:output>
>
> </wsdl:operation>
>
> </wsdl:binding>
>
> <wsdl:service name="HelloWorldService">
>
> <wsdl:port binding="tns:HelloWorldSoapBinding"
> name="HelloWorldSoapPort">
>
> <wsdlsoap:address location="http://localhost:8080/SOULSessionService"
> />
>
> </wsdl:port>
>
> </wsdl:service>
>
> </wsdl:definitions>
>
> TestClient:
>
>
>
> package de.cenit.tests;
>
> import static org.junit.Assert.*;
>
> import org.junit.Test;
>
>
>
> import commonj.sdo.DataObject;
> import commonj.sdo.helper.XMLHelper;
>
> import de.cenit.SOUL.ServiceRuntime.ISOULService;
> import de.cenit.SOUL.ServiceRuntime.SDOTools;
> import de.cenit.SOUL.ServiceRuntime.SOULServiceProvider;
> import de.cenit.SOUL.ServiceRuntime.ISOULSessionService;
> import de_cenit_SOUL_ServiceRuntime.SOULException;
>
> public class SOULSessionServiceTest {
>
> @Test
> public void testExec() {
>
> SOULServiceProvider lServiceProvider=new SOULServiceProvider();
>
>
> SOULServiceProvider lSOULServiceProvider=new SOULServiceProvider();
>
> ISOULSessionService SessionService
> =lSOULServiceProvider.getService
> ("SOULSessionServiceClient",ISOULSessionService.class);
>
>
>
> DataObject name =
> SDOTools.loadSDOFromFile("LogonData","LogonData");
>
>
> DataObject value =null;
> try {
> SessionService.exec((DataObject)name);
>
> System.out.println("GETSTATE");
> System.out.println("SessionID:"+SessionService.getSessionID(""));
> SessionService.exec((DataObject)name);
> System.out.println("SessionID:"+SessionService.getSessionID(""));
> ISOULSessionService SessionService2
> =lSOULServiceProvider.getService
> ("SOULSessionServiceClient",ISOULSessionService.class);
>
> SessionService2.exec((DataObject)name);
> System.out.println("SessionID:"+SessionService2.getSessionID(""));
>
> } catch (SOULException e) {
> String lmsgString=e.getMessage();
> System.out.println("MSG:"+lmsgString);
>
> String ldoString=e.getDOString();
> System.out.println("SDO:"+ldoString);
>
> }
>
> }
>
> }
>
>
>
>
>
>
> CENIT AG Systemhaus, Industriestrasse 52-54, 70565 Stuttgart, Tel.:
> +49
> 711 7825-30, Fax: +49 711 7825-4000, Internet: www.cenit.de
> Geschaeftsstellen: Berlin, Duesseldorf, Frankfurt, Hamburg, Hannover,
> Muenchen, Saarbruecken
> Vorstandsmitglieder: Kurt Bengel, Christian Pusch
> Aufsichtsratsmitglieder: Falk Engelmann (Vorsitzender des
> Aufsichtsrats), Hubert Leypoldt, Dr. Dirk Lippold
> Bankverbindungen: Deutsche Bank (BLZ 600 700 70) Kto. 1661 040,
> Commerzbank (BLZ 600 400 71) Kto. 532 015 500, BW-Bank (BLZ 600 501 01) Kto.
> 2 403 313
> Registergericht: Amtsgericht Stuttgart
> Handelsregister: HRB Nr. 19117
> Umsatzsteuer: ID-Nr. DE 147 862 777
Hi Bjorn
Let me ask a question or two to make sure that I understand you scenario.
1/ Without Web Services
-----------------------
(A)SOULSessionServiceTest ---Java---> (B)SOULSessionServiceClient
impl =
SOULSessionService
2/ With Web Services
--------------------
(A)SOULSessionServiceTest ---Java---> (B)SOULSessionServiceClient
---WebService---> (C)HelloWorldService
impl =
SOULSessionServiceComponent
You observe that in case 1 the conversationId recorded at B is the same every
time you call SOULSessionServiceClient through the same proxy.
You observe that in case 2 the conversationId recorded at B is different every
time you call SOULSessionServiceClient through the same proxy
Is it possible to share with the implementation of SOULSessionServiceComponent,
or at least it @Scope configuration?
Where does the WSDL you included get used?
Regards
Simon
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]