[Ctk-developers] Ctk-developers Digest, Vol 26, Issue 6
Sascha Zelzer
s.zelzer at dkfz-heidelberg.de
Mon Sep 19 16:35:46 UTC 2011
I can see how it helps to initialize static data for a singleton
consistently for multiple compilation units within one library.
However, I do not understand how the duplication of the "nifty_counter"
symbol in Stream.cpp (if compiled into a static lib) could be prevented
when it is linked from multiple dlls?
- Sascha
On 09/19/2011 06:25 PM, Jean-Christophe Fillion-Robin wrote:
> ctkSingleton or a similar approach relying on a nifty counter ensures
> that only one instance of the singleton will be available within
> different shared library. It also ensure that the memory is properly
> cleaned when the last library that was referencing the singleton is
> unloaded.
>
> See
> https://secure.wikimedia.org/wikibooks/en/wiki/More_C%2B%2B_Idioms/Nifty_Counter
>
> Jc
>
> On Mon, Sep 19, 2011 at 12:19 PM, Sascha Zelzer
> <s.zelzer at dkfz-heidelberg.de <mailto:s.zelzer at dkfz-heidelberg.de>> wrote:
>
> 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>
>>
>
>
>
>
> --
> +1 919 869 8849
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/ctk-developers/attachments/20110919/77e6766a/attachment.htm>
More information about the Ctk-developers
mailing list