[Ctk-developers] Ctk-developers Digest, Vol 26, Issue 6
Sascha Zelzer
s.zelzer at dkfz-heidelberg.de
Mon Sep 19 16:19:11 UTC 2011
Hi Jc,
thanks for the pointer, but I would rather not modify the original
QtSOAP code. Besides, ctkSingleton.h wouldn't change the fact that the
singleton would be duplicated if it is defined in a static lib and
linked from multiple shared libs.
Thanks,
Sascha
On 09/19/2011 05:19 PM, Jean-Christophe Fillion-Robin wrote:
> Good catch !
>
> For proper implementation of Singleton, you could refer to ctkSingleton.h
>
> See https://github.com/commontk/CTK/blob/master/Libs/Core/ctkSingleton.h
>
> Thanks
> Jc
>
> On Mon, Sep 19, 2011 at 10:31 AM, Sascha Zelzer
> <s.zelzer at dkfz-heidelberg.de <mailto:s.zelzer at dkfz-heidelberg.de>> wrote:
>
> You're welcome! Thanks to you for your debugging efforts and
> detailed reports here.
>
> -Sascha
>
>
> On 09/19/2011 04:18 PM, Anthony Dass wrote:
>> Hello Sascha,
>>
>> Its really great to know about this fix!. Thank you so much for
>> fixing this so quickly. It would really help us, i'll try with
>> this version.
>>
>> Once again thank you very much!
>>
>> Thanks,
>> ~Anthony
>>
>>
>>
>>
>> On Mon, Sep 19, 2011 at 7:59 AM, Sascha Zelzer
>> <s.zelzer at dkfz-heidelberg.de
>> <mailto:s.zelzer at dkfz-heidelberg.de>> wrote:
>>
>> Hi Anthony,
>>
>> I finally investigated the issue under Windows (I could not
>> reproduce it on Linux) and just pushed a fix for it to CTK.
>> Please update your CTK sources and build CTK at the
>> superbuild level (this should update the QtSOAP library) to
>> fix the namespace issue.
>>
>> Here is the technical stuff why it went wrong ;-)
>>
>> QtSOAP was build as a static library but it used a singleton
>> called QtSoapNamespace in its code. So using singletons from
>> a static library in multiple DLLs is a bad idea and this is
>> why the namespaces where missing for some QtSoapMessage
>> instances (they where initialized in one DLL, which filled
>> this DLLs QtSOAPNamespace singleton with namespace entries,
>> but serialized to XML in an other DLL, whose singleton did
>> not know anything about the namespaces).
>>
>> Best,
>> Sascha
>>
>>
>>
>>
>> On 09/14/2011 03:24 AM, Anthony Dass wrote:
>>> Hi Sascha and Ben,
>>>
>>> I noticed that only on submitting the SOAP request the
>>> namespaces is getting lost but for the same submission the
>>> response shows the valid message with the namespace included.
>>>
>>> So, in the ctkSoapClient class, I just tried creating the
>>> QtSoapType object (as below) to set as a method arguments
>>> and this works! - gets the required namespace as expected
>>> and the SOAP message is valid one. However if we do the same
>>> construction in ctkDicomHostService and pass to the
>>> ctkSimpleSoapClient object via function call, it doesn't
>>> seem to work. do you have any clue?
>>>
>>> //created in submitSoapRequest of the ctkSimpleSoapClient class
>>> QtSoapType* soapType = new
>>> QtSoapSimpleType(QtSoapQName("state"),
>>> ctkDicomSoapState::toStringValue(ctkDicomAppHosting::IDLE));
>>> request.addMethodArgument(soapType);
>>>
>>>
>>> Below is the SOAP message of the request and response.
>>>
>>> submit Request(request, d->Path); - namespace missing in the
>>> type attribute
>>> =========================
>>> <SOAP-ENV:Envelope
>>> xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
>>> SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
>>> xmlns:xsd="htt
>>> p://www.w3.org/1999/XMLSchema
>>> <http://www.w3.org/1999/XMLSchema>">
>>> <SOAP-ENV:Body
>>> xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
>>> <setState xmlns="http://wg23.dicom.nema.org/">
>>> <state :type="xsd:string">CANCELED</state>
>>> </setState>
>>> </SOAP-ENV:Body>
>>> </SOAP-ENV:Envelope>
>>>
>>> Got Response. Response: - name space for type attribute is
>>> present.
>>> =========================
>>> "<SOAP-ENV:Envelope
>>> xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
>>> SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
>>> xml
>>> ns:xsd="http://www.w3.org/1999/XMLSchema">
>>> <SOAP-ENV:Body
>>> xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
>>> <SOAP-ENV:setState
>>> xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
>>> <SOAP-ENV:setStateResponse
>>> xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
>>> xsi:type="xsd:boolean"
>>> xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance">false</SOAP-ENV:setStateResponse>
>>> </SOAP-ENV:setState>
>>> </SOAP-ENV:Body>
>>> </SOAP-ENV:Envelope>
>>>
>>> Thank you!
>>> /Anthony
>>>
>>> On Fri, Sep 9, 2011 at 4:31 AM, Benoit Bleuze
>>> <benoit.bleuze at inria.fr <mailto:benoit.bleuze at inria.fr>> wrote:
>>>
>>> We indeed completely depend on QtSoap for creating the
>>> Soap messages. If the soap message looks like this
>>> before any parsong, there is definitely something wrong
>>> in QtSoap.
>>> However it was tha case, I would understand that our
>>> implementation works only on our host, but it also works
>>> with XIP, which is not based on QtSoap.
>>> So either this attribute is simply ignored by the java
>>> implementation, or there is some preprocessing that
>>> strips part of the message?
>>> Definitely worth investigating...
>>>
>>> ------------------------------------------------------------------------
>>>
>>> Hello Sascha and Ben,
>>>
>>> Thank you very much for the quick and detailed answers.
>>>
>>> In addition, when we tried to validate the message
>>> using the online validations -
>>> http://www.xmlvalidation.com we also see the type
>>> attribute :type="xsd:string" is not a valid XML
>>> attribute string and also it looks that the
>>> namespace name is missing here. The string should be
>>> either type="xsd:string" if no namespace is
>>> used(without leading colon), or this
>>> xmlns:type="xsd:string" if xmlns is a namespace name.
>>>
>>> Since the method addMethodAttribute
>>> of QtSoapmessage is setting this, is that we need to
>>> change in the QtSoap module? or any other options?
>>> please advice.
>>>
>>> thank you very much!
>>> /Anthony
>>>
>>>
>>> On Thu, Sep 8, 2011 at 6:47 AM,
>>> <ctk-developers-request at commontk.org
>>> <mailto:ctk-developers-request at commontk.org>> wrote:
>>>
>>> Send Ctk-developers mailing list submissions to
>>> ctk-developers at commontk.org
>>> <mailto:ctk-developers at commontk.org>
>>>
>>> To subscribe or unsubscribe via the World Wide
>>> Web, visit
>>> http://public.kitware.com/cgi-bin/mailman/listinfo/ctk-developers
>>> or, via email, send a message with subject or
>>> body 'help' to
>>> ctk-developers-request at commontk.org
>>> <mailto:ctk-developers-request at commontk.org>
>>>
>>> You can reach the person managing the list at
>>> ctk-developers-owner at commontk.org
>>> <mailto:ctk-developers-owner at commontk.org>
>>>
>>> When replying, please edit your Subject line so
>>> it is more specific
>>> than "Re: Contents of Ctk-developers digest..."
>>>
>>>
>>> Today's Topics:
>>>
>>> 1. Re: CTK based Hosted App fails when
>>> launched from Non-CTK
>>> Host (Benoit Bleuze)
>>>
>>>
>>> ----------------------------------------------------------------------
>>>
>>> Message: 1
>>> Date: Thu, 8 Sep 2011 12:46:30 +0200 (CEST)
>>> From: Benoit Bleuze <benoit.bleuze at inria.fr
>>> <mailto:benoit.bleuze at inria.fr>>
>>> Subject: Re: [Ctk-developers] CTK based Hosted
>>> App fails when launched
>>> from Non-CTK Host
>>> To: Sascha Zelzer <s.zelzer at dkfz-heidelberg.de
>>> <mailto:s.zelzer at dkfz-heidelberg.de>>
>>> Cc: Anthony Dass <antdass at gmail.com
>>> <mailto:antdass at gmail.com>>,
>>> ctk-developers at commontk.org
>>> <mailto:ctk-developers at commontk.org>
>>> Message-ID:
>>> <610925954.61455.1315478790178.JavaMail.root at zmbs4.inria.fr
>>> <mailto:610925954.61455.1315478790178.JavaMail.root at zmbs4.inria.fr>>
>>> Content-Type: text/plain; charset="utf-8"
>>>
>>> Hi Anthony, Sascha gave you all the technical
>>> answers we had in stock so far, but I can add a
>>> bit of context here, it may help. As Sascha
>>> said, the state/newState switch is due to XIP
>>> not following the specifications. And your
>>> change is valid. We started with "state", but
>>> the only other host we could use being XIP, we
>>> changed it. You are welcome to revert it. I
>>> think we notified Larry (Lawrence Tarbox) of
>>> that problem during the last hackfest in Chapel
>>> Hill. Eventually XIP will change its API there
>>> (or so I hope). Replacing the WSDL files doesn't
>>> change anything since we don't use them to
>>> generate the interface, all the messages are
>>> hard coded soap messages constructed from C++.
>>> Now I know nothing of the WCF unfortunately, so
>>> I can't tell you whether the "type:" keyword is
>>> misinterpreted or whatever. Sascha's suggestion
>>> of changing the casing sounds promising to me. I
>>> remember we used capitals in some actions ,
>>> following the WSDL actually, and had to change
>>> it afterwards for
>>> specifications and XIP compatibility. I
>>> remember Larry telling us the WSDL provided in
>>> the specs was not up to date, and thus we
>>> provide an updated (or at least it was valid
>>> last february) set of WSDL (and siblings) files
>>> there:
>>> http://www.commontk.org/index.php/File:Wsdl_ft.zip
>>> Note that they also have actions starting with
>>> capitals. I have a faint memory of Larry giving
>>> us an explanation as to why they were upper
>>> cased, but I can't remember the reason, my guess
>>> is that the .Net implementation forced them to
>>> do so. And it is very well possible that the XIP
>>> java implementation accepts both casing and the
>>> .NET or WCF are stricter, so I guess you'll have
>>> to choose between the proposed WSDL and the
>>> specifications... Keep us posted of your
>>> progress. Ben ----- Original Message -----
>>> > Hi Anthony,
>>> > Welcome to the ctk-developers list.
>>> > > We've tried adapting one of our DICOM
>>> application into a CTK Based
>>> > > Hosted App. It works well when tried with
>>> the ctkhost - we could
>>> > > launch the app, load the DICOM data and get
>>> through different states
>>> > > as well.
>>> > So far, good news.
>>> > > However when tried launching the same app
>>> with different non-ctk
>>> > > based
>>> > > host, it launches our app but fails to load
>>> any data. This non-ctk
>>> > > based host seems to be written using the WCF
>>> as per specification in
>>> > > DICOM 118.
>>> > Please note that we could only test our
>>> implementation against the XIP
>>> > host (written in Java) so far. So the problems
>>> you are experiencing
>>> > might very well relate to our implementation.
>>> > > On investigating, we noticed that the
>>> initial ?IDLE? message sent by
>>> > > the App upon launch is not getting processed
>>> by the Non-CTK based
>>> > > host.
>>> > > When traced the SOAP communication, we found
>>> out that the messages
>>> > > from the plug-in are getting to the host,
>>> but then they are not
>>> > > processed by WCF because of some WSDL
>>> contacts mismatch. Thus the
>>> > > host
>>> > > does not receive any messages. Here?s the
>>> log message:
>>> > > < Message > The message with Action ''
>>> cannot be processed at the
>>> > > receiver, due to a ContractFilter mismatch
>>> at the
>>> > > EndpointDispatcher.
>>> > > This may be because of either a contract
>>> mismatch (mismatched
>>> > > Actions
>>> > > between sender and receiver) or a
>>> binding/security mismatch between
>>> > > the sender and the receiver. Check that
>>> sender and receiver have the
>>> > > same contract and the same binding
>>> (including security requirements,
>>> > > e.g. Message, Transport, None). </ Message >
>>> > > When debugging the WCF processing of the
>>> message we get the
>>> > > deserialization error:
>>> > > "The ':' character, hexadecimal value 0x3A,
>>> cannot be included in a
>>> > > name. Line 4, position 11."
>>> > > Here?s the SOAP message braced between the
>>> CTK-plugin and Non-CTK
>>> > > based Host:
>>> > > < SOAP-ENV:Envelope xmlns:SOAP-ENV = "
>>> > > http://schemas.xmlsoap.org/soap/envelope/ "
>>> SOAP-ENV:encodingStyle =
>>> > > "
>>> > > http://schemas.xmlsoap.org/soap/encoding/ "
>>> xmlns:xsd = "
>>> > > http://www.w3.org/1999/XMLSchema " >
>>> > > < SOAP-ENV:Body xmlns:SOAP-ENV = "
>>> > > http://schemas.xmlsoap.org/soap/envelope/ " >
>>> > > < notifyStateChanged xmlns = "
>>> http://wg23.dicom.nema.org/ " >
>>> > > < newState :type = " xsd:string " > IDLE </
>>> newState >
>>> > > </ notifyStateChanged >
>>> > > </ SOAP-ENV:Body >
>>> > > </ SOAP-ENV:Envelope >
>>> > > We can see the ?:type? item in the newState
>>> element that?s causing
>>> > > the
>>> > > error in WCF. Also, per DICOM supplement 118
>>> it should be called
>>> > > ?state?, not ?newState?.
>>> > Looking at the debug output from the CTK
>>> hosted app, the xml namespace
>>> > for the "type" attribute in the "newState" tag
>>> is intact. So I am
>>> > wondering it the output above has already been
>>> modified somehow by the
>>> > WCF host or if it is the original message from
>>> the CTK hosted app.
>>> > > Here?s the example of the SOAP message
>>> generated by Non-CTK based
>>> > > HostedApp: < s:Envelope xmlns:s = "
>>> > > http://schemas.xmlsoap.org/soap/envelope/ "
>>> > < s:Body > <
>>> > > NotifyStateChanged xmlns = "
>>> > >
>>> http://dicom.nema.org/PS3.19/HostService-20100825 "
>>> > < state > IDLE
>>> > > </ state > </ NotifyStateChanged > </ s:Body
>>> > </ s:Envelope >
>>> > > Next, we tried changing ?newState? to
>>> ?state? but again it fails
>>> > > when
>>> > > tried with the non-ctk based host and
>>> producing the same error.
>>> > I think it is still either related to the
>>> ":type" attribute or the
>>> > error described below. Concerning
>>> state/newState, please also see my
>>> > comments below.
>>> > > ...
>>> > > 2011-09-06 17:17:59,609 <faultstring
>>> xsi:type="xsd:string"
>>> > > xmlns:xsi="
>>> > > http://www.w3.org/1999/XMLSchema-instance
>>> ">The message with Action
>>> > > ''
>>> > > cannot be processed at the receiver, due to
>>> a ContractFilter
>>> > > mismatch
>>> > > at the EndpointDispatcher. This may be
>>> because of either a contract
>>> > > mismatch (mismatched Actions between sender
>>> and receiver) or a
>>> > > binding/security mismatch between the sender
>>> and the receiver. Check
>>> > > that sender and receiver have the same
>>> contract and the same binding
>>> > > (including security requirements, e.g.
>>> Message, Transport,
>>> > > None).</faultstring> ...
>>> > This actually hints at a problem concerning
>>> the action names. Looking
>>> > at the WSDL, the operation names start with
>>> upper case latters, where
>>> > we are using lower case (unfortunately, the
>>> text in the DICOM Part 19
>>> > specs refer to the method names with starting
>>> lower case letters).
>>> > > I even tried replacing the WSDL files with
>>> the one provided by
>>> > > Non-CTK
>>> > > based host, but still it doesn?t seem to work.
>>> > Yes, that does not change the actual behavior.
>>> > > When looked at the code, I noticed a comment
>>> in the CTK code (below
>>> > > methods) ?spec would be "state", java has
>>> "newState" FIX
>>> > > JAVA/STANDARD?. Could this be something we
>>> need to look for? If so
>>> > > may
>>> > > I know what would be the change in Java side.
>>> > Unfortunately, again, the text in the specs
>>> refer to "newState" for
>>> > the argument name and this is what the XIP
>>> host is using. So we used
>>> > it too for testing with XIP. But I agree that
>>> the WSDL should be the
>>> > definite guide and we should use "state" when
>>> not testing with XIP.
>>> > My advice would be to keep your modification
>>> ("newState" -> "state")
>>> > and also try to modify the action (method)
>>> names in
>>> > ctkDicomAppService.cpp (lines 40 - 60) to use
>>> upper case for the first
>>> > letter.
>>> > I would be happy if you could keep us posted
>>> about your progress.
>>> > Thanks,
>>> > Sascha
>>> > _______________________________________________
>>> > Ctk-developers mailing list
>>> > Ctk-developers at commontk.org
>>> <mailto:Ctk-developers at commontk.org>
>>> >
>>> http://public.kitware.com/cgi-bin/mailman/listinfo/ctk-developers
>>> -------------- next part --------------
>>> An HTML attachment was scrubbed...
>>> URL:
>>> <http://public.kitware.com/pipermail/ctk-developers/attachments/20110908/e75bdbbd/attachment.htm>
>>>
>>> ------------------------------
>>>
>>> _______________________________________________
>>> Ctk-developers mailing list
>>> Ctk-developers at commontk.org
>>> <mailto:Ctk-developers at commontk.org>
>>> http://public.kitware.com/cgi-bin/mailman/listinfo/ctk-developers
>>>
>>>
>>> End of Ctk-developers Digest, Vol 26, Issue 6
>>> *********************************************
>>>
>>>
>>>
>>>
>>
>>
>
>
> _______________________________________________
> Ctk-developers mailing list
> Ctk-developers at commontk.org <mailto:Ctk-developers at commontk.org>
> http://public.kitware.com/cgi-bin/mailman/listinfo/ctk-developers
>
>
>
>
> --
> +1 919 869 8849 <tel:%2B1%20919%20869%208849>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/ctk-developers/attachments/20110919/bdc37531/attachment.htm>
More information about the Ctk-developers
mailing list