bimargulies wrote:
> 
> Looks like the doctype adds one more event/node to the picture, and
> something trips over it.
> 
> On Thu, Mar 25, 2010 at 2:46 PM, Daniel Kulp <dk...@apache.org> wrote:
>> On Thursday 25 March 2010 10:02:07 am J. Aparicio wrote:
>>> OK, found out what the problem was.
>>>
>>> The xsd in question includes a DOCTYPE declaration. Of all the involved
>>> wsdl and xsd documents in the app, it's the only one with a DOCTYPE
>>> declaration. Taking it out of the document allowed CXF to return the
>>> xsd.
>>
>> Well, that's interesting.   Unexpected, but interesting.
>>
>>
>>> Now, my question (which doesn't belong to cxf anymore) is whether that
>>> DOCTYPE declaration should be there at all, or if the standard xsd was
>>> revised at some point and the DOCTYPE declaration taken out. The latest
>>> version I've been able to find lies at
>>> http://www.w3.org/2005/08/addressing/ws-addr.xsd, and DOESN'T have a
>>> DOCTYPE declaration.
>>>
>>> On the CXF-related side, is it legal for StaxUtils to choke on such a
>>> node
>>> type? Can't it just ignore it?
>>
>> I would have also expected it to just ignore it.  Not sure why it
>> wouldn't be.
>> Is there any way you could create a small testcase that shows it throwing
>> the
>> exception?    That would make it easier to debug it.   I'm really not
>> sure how
>> a DOCTYPE would cause this.   Very bizzarre.
>>
> 

Actually class org.apache.cxf.staxutils.StaxUtils, function "public static
void writeNode(Node n, XMLStreamWriter writer, boolean repairing) throws
XMLStreamException" contains a big "switch(n.getNodeType()) {",
Node.DOCUMENT_TYPE_NODE is processed by the default case, which throws an
IllegalStateException.

So taking away the DOCTYPE declaration (definition?) from the xsd document
avoids StaxUtils blind spot. IIRC, xmlschemas are favored over dtd, but dtds
are still legal, so the longer term solution would be to include an
additional case to that function in StaxUtils, something like:

<code>
        case Node.DOCUMENT_TYPE_NODE:
                writer.writeDTD(((DocumentType)n).getTextContent());
                break;
</code>

Just a suggestion, I've not even checked that the above compiles.


-- 
View this message in context: 
http://old.nabble.com/Relative-paths-in-xsd%3Aimport-tp28018462p28040040.html
Sent from the cxf-user mailing list archive at Nabble.com.

Reply via email to