Re: Wrong namespace prefix in generated documents?

2014-08-07 Thread Michael Bishop
Hi Peter,

You're right, I came across that table recently since I've been working at
this problem most of the day. Let me share one more thing I've discovered.
It appears that XMLBeans has always been ignoring my namespace prefixes. In
URL form, it will use the last "token" and in URN form, it will use the
first:

xmlns:aaa="http://test.example.com/TOKEN";
xmlns:bbb="TOKEN:xxx:yyy:zzz"

In other words, the declared (xmlns:...) prefixes above are never honored.
In both cases, TOKEN will end up being the prefix. I thought this had
worked before because my old namespace was:

xmlns:aaa="http://test.example.com/aaa";

Changing the trailing "aaa" in the URL will change the prefix in the
generated document.

So why do I need the same prefix?

Our application is transitioning from version X to version X.1.
Our customer has requested a namespace change to URN form.
We have extensive documentation and screen shots that show the old prefix.
We also have XPath statements scattered throughout our application that
reference the old prefix.
It was believed that it would be far less of a hassle to correct the prefix
than it would to correct all our documentation and XPath statements.

In our application, when a user creates a new instance of the document, it
uses Factory.newInstance() which results in a document with the wrong
namespace. Like a lot of other applications (Word, Excel, etc.), our files
reside "in memory" until they are saved. So a new document would carry the
wrong prefix until it was saved. Even after it was saved, it would have to
be reloaded by the application to have the correct prefix "in-memory." Our
application also has the ability to digitally sign documents. Signing one
prefix, then saving another causes the signature to break.

So the options are starting to look like this:
1. Figure out why XMLBeans doesn't honor my xmlns:... declarations.
2. Change the namespace URN to start with the desired prefix. Obviously,
this is a workaround.
3. Use the new prefix and change everything else to suit.

So I guess my first question (in this email at least) is does XMLBeans ever
try to honor xmlns prefix declarations? If so, what's wrong with the schema
I posted that causes this not to happen? Can anyone get the schema I
previously posted to use the aaa prefix as declared?

Michael


On Thu, Aug 7, 2014 at 3:32 PM, Peter Keller 
wrote:

> Hi Michael,
>
> There is a table in the Javadocs that states which options are used by
> which methods: see
> <
> http://xmlbeans.apache.org/docs/2.6.0/reference/org/apache/xmlbeans/XmlOptions.html>.
> You have to make the prefix suggestion in the options to a save or xmlText
> method: they won't have any effect in a newInstance method. What you have
> observed here is expected and documented.
>
> Maybe I'm missing something, but I can't think of any scenario where
> this is going to cause any problems. If you really need the prefix to be
> a particular string before you get to the stage of writing or saving the
> XML document, perhaps you could explain why? Then we might be able to
> think of other ways to solve the issue.
>
> Regards,
> Peter.
>
> On Thu, 2014-08-07 at 13:53 -0400, Michael Bishop wrote:
> > OK, here is a test schema:
> >
> > 
> > http://www.w3.org/2001/XMLSchema";
> >xmlns:aaa="bbb:ccc:ddd:eee:fff:aaa"
> >targetNamespace="bbb:ccc:ddd:eee:fff:aaa"
> >elementFormDefault="qualified">
> >
> > 
> >
> > 
> > 
> >  > maxOccurs="1"/>
> >  > maxOccurs="1"/>
> >  > maxOccurs="1"/>
> >  > maxOccurs="1"/>
> >  > minOccurs="1" maxOccurs="1"/>
> >  > maxOccurs="1"/>
> >  > minOccurs="1" maxOccurs="1"/>
> >  > minOccurs="0" maxOccurs="1"/>
> > 
> > 
> > 
> > 
> >
> >
> > TestDocument doc = TestDocument.Factory.newInstance();
> > doc.addNewTest();
> >
> > // Wrong, default Factory output.
> > doc.xmlText(): 
> >
> >
> > // Correct output that I can't get from just the Factory.newInstance()
> > method.
> > doc.xmlText(options): 
> >
> >
> > Does anyone else get the same compilation results? Is there a reason
> > the new instances won't default to xmlns:aaa as declared? I'd be hard
> > pressed to believe that something in XMLBeans is causing this. It's
> > probably something I'm doing. Does the XSDConfig file have any
> > influence that I'm missing?
> >
> >
> > Michael Bishop
> >
> >
> >
> > On Thu, Aug 7, 2014 at 1:22 PM, Michael Bishop 
> > wrote:
> > I've got to figure out how to debug it. Currently, it's in a
> > Maven project with the XMLBeans plugin running the schema
> > compilation.
> >
> >
> > The map works when I call save(options) or xmlText(options),
> > but not when the document is created
> > (Factory.newInstance(options)).
> >
> >
> >
> > // Option that sets the namespace map.
> >
> > XmlOptions options = ...;
> >
> >
> > 

Re: Wrong namespace prefix in generated documents?

2014-08-07 Thread Peter Keller
Hi Michael,

There is a table in the Javadocs that states which options are used by
which methods: see
.
 You have to make the prefix suggestion in the options to a save or xmlText 
method: they won't have any effect in a newInstance method. What you have 
observed here is expected and documented.

Maybe I'm missing something, but I can't think of any scenario where
this is going to cause any problems. If you really need the prefix to be
a particular string before you get to the stage of writing or saving the
XML document, perhaps you could explain why? Then we might be able to
think of other ways to solve the issue.

Regards,
Peter.

On Thu, 2014-08-07 at 13:53 -0400, Michael Bishop wrote:
> OK, here is a test schema:
> 
> 
> http://www.w3.org/2001/XMLSchema";
>xmlns:aaa="bbb:ccc:ddd:eee:fff:aaa"
>targetNamespace="bbb:ccc:ddd:eee:fff:aaa"
>elementFormDefault="qualified">
> 
> 
> 
> 
> 
>  maxOccurs="1"/>
>  maxOccurs="1"/>
>  maxOccurs="1"/>
>  maxOccurs="1"/>
>  minOccurs="1" maxOccurs="1"/>
>  maxOccurs="1"/>
>  minOccurs="1" maxOccurs="1"/>
>  minOccurs="0" maxOccurs="1"/>   
> 
> 
> 
> 
> 
> 
> TestDocument doc = TestDocument.Factory.newInstance();
> doc.addNewTest();
> 
> // Wrong, default Factory output.
> doc.xmlText(): 
> 
> 
> // Correct output that I can't get from just the Factory.newInstance()
> method.
> doc.xmlText(options): 
> 
> 
> Does anyone else get the same compilation results? Is there a reason
> the new instances won't default to xmlns:aaa as declared? I'd be hard
> pressed to believe that something in XMLBeans is causing this. It's
> probably something I'm doing. Does the XSDConfig file have any
> influence that I'm missing?
> 
> 
> Michael Bishop
> 
> 
> 
> On Thu, Aug 7, 2014 at 1:22 PM, Michael Bishop 
> wrote:
> I've got to figure out how to debug it. Currently, it's in a
> Maven project with the XMLBeans plugin running the schema
> compilation.
> 
> 
> The map works when I call save(options) or xmlText(options),
> but not when the document is created
> (Factory.newInstance(options)).
> 
> 
> 
> // Option that sets the namespace map.
> 
> XmlOptions options = ...;
> 
> 
> MyDoc doc = MyDoc.Factory.newInstance(options);
> 
> 
> System.out.println("Wrong prefix: " + doc.xmlText());
> 
> System.out.println("Right prefix: " + doc.xmlText(options));
> 
> 
> The schema is spread out across multiple files. I'm going to
> try to create a small test case to see if I can't reproduce
> this.
> 
> 
> 
> On Mon, Aug 4, 2014 at 4:31 PM, Cezar Andrei
>  wrote:
> Michael,
> 
> That's odd, please check that your namespace URI is
> exactly the same in both the schema and the map you're
> setting. Also, make sure the prefix you want is not
> already used in your document with a different URI.
> 
> If it's still not working and you're not afraid of
> debugging, you can trace the ensureMapping method in
> Saver.java:757 .
> 
> http://svn.apache.org/viewvc/xmlbeans/trunk/src/store/org/apache/xmlbeans/impl/store/Saver.java?view=markup
> 
> Cezar
> 
> 
> On 08/02/2014 02:04 PM, Michael Bishop wrote:
> 
> OK, thanks for the information. Unfortunately,
> this doesn't seem to fix the problem. I
> thought I'd tried the steps outlined in the
> linked blog before, but I did it again, just
> in case.
> 
> Here's the full schema definitions:
> 
> Old:
>  xmlns:xs="http://www.w3.org/2001/XMLSchema";
> 
> *xmlns:xxx="http://..."*
> 
>targetNamespace="http://...";
>elementFormDefault="qualified">
> 
> New:
>  xmlns:xs="http://www.w3.org/2001/XMLSchema";
> 
> *xmlns:xxx="yyy:aaa:bbb..."*
> 
>targetNamespace="yyy:..."
>  

Re: Wrong namespace prefix in generated documents?

2014-08-07 Thread Michael Bishop
OK, here is a test schema:


http://www.w3.org/2001/XMLSchema";
   xmlns:aaa="bbb:ccc:ddd:eee:fff:aaa"
   targetNamespace="bbb:ccc:ddd:eee:fff:aaa"
   elementFormDefault="qualified">


















TestDocument doc = TestDocument.Factory.newInstance();
doc.addNewTest();

// Wrong, default Factory output.
doc.xmlText(): 

// Correct output that I can't get from just the Factory.newInstance()
method.
doc.xmlText(options): 

Does anyone else get the same compilation results? Is there a reason the
new instances won't default to xmlns:aaa as declared? I'd be hard pressed
to believe that something in XMLBeans is causing this. It's probably
something I'm doing. Does the XSDConfig file have any influence that I'm
missing?

Michael Bishop


On Thu, Aug 7, 2014 at 1:22 PM, Michael Bishop  wrote:

> I've got to figure out how to debug it. Currently, it's in a Maven project
> with the XMLBeans plugin running the schema compilation.
>
> The map works when I call save(options) or xmlText(options), but not when
> the document is created (Factory.newInstance(options)).
>
> // Option that sets the namespace map.
> XmlOptions options = ...;
>
> MyDoc doc = MyDoc.Factory.newInstance(options);
>
> System.out.println("Wrong prefix: " + doc.xmlText());
> System.out.println("Right prefix: " + doc.xmlText(options));
>
> The schema is spread out across multiple files. I'm going to try to create
> a small test case to see if I can't reproduce this.
>
>
> On Mon, Aug 4, 2014 at 4:31 PM, Cezar Andrei 
> wrote:
>
>> Michael,
>>
>> That's odd, please check that your namespace URI is exactly the same in
>> both the schema and the map you're setting. Also, make sure the prefix you
>> want is not already used in your document with a different URI.
>>
>> If it's still not working and you're not afraid of debugging, you can
>> trace the ensureMapping method in Saver.java:757 .
>> http://svn.apache.org/viewvc/xmlbeans/trunk/src/store/org/
>> apache/xmlbeans/impl/store/Saver.java?view=markup
>>
>> Cezar
>>
>>
>> On 08/02/2014 02:04 PM, Michael Bishop wrote:
>>
>>> OK, thanks for the information. Unfortunately, this doesn't seem to fix
>>> the problem. I thought I'd tried the steps outlined in the linked blog
>>> before, but I did it again, just in case.
>>>
>>> Here's the full schema definitions:
>>>
>>> Old:
>>> http://www.w3.org/2001/XMLSchema";
>>> *xmlns:xxx="http://..."*
>>>
>>>targetNamespace="http://...";
>>>elementFormDefault="qualified">
>>>
>>> New:
>>> http://www.w3.org/2001/XMLSchema";
>>> *xmlns:xxx="yyy:aaa:bbb..."*
>>>
>>>targetNamespace="yyy:..."
>>>elementFormDefault="qualified">
>>>
>>> As you can see, in both schemas, I'm declaring a namespace of *xxx*, but
>>> it's only honored in the old schema. The only thing that's changed between
>>> schemas is the namespace. I had a request from our customer to change it.
>>> However, a call to:
>>>
>>>
>>> MyGeneratedClass.Factory.newInstance() results in a document that looks
>>> like this:
>>>
>>> 
>>>
>>> Applying a namespace map to an XmlOptions object doesn't seem to have
>>> any effect. I've tried it with the call to 
>>> MyGeneratedClass.Factory.newInstance()
>>> and a call to MyGeneratedInstance.xmlText():
>>>
>>> XmlOptions options = new XmlOptions();
>>> Map nsMap = new HashMap<>();
>>> nsMap.put("yyy:aaa:bbb", "xxx");
>>> options.setSaveSuggestedPrefixes(nsMap);
>>>
>>> // No change to output.
>>> MyGeneratedClass.Factory.newInstance(options);
>>> MyGeneratedInstance.xmlText(options);
>>>
>>> I guess I have two questions:
>>>
>>> 1. Why is the prefix declaration in my schema being ignored? *xmlns:xxx*
>>> has never changed. It's only the value of the namespace that has changed.
>>>
>>> 2. I find it odd that Map has no effect either. Is there anything else I
>>> should be looking into? I'm not sure if my schema is somehow "wrong" or I
>>> have a setting in XMLBeans misconfigured. It's becoming more than just an
>>> annoying problem. XPath statements are now broken since they employ the
>>> *xxx* prefix. I'm not sure where to start tracking down the issue. Both the
>>> guidance and the docs seem straightforward to me, yet I can't get it to
>>> work properly.
>>>
>>>
>>> Any guidance is appreciated. I'm on XMLBeans 2.5.0. If there's anything
>>> more I can provide, I can do so.
>>>
>>> Michael Bishop
>>>
>>>
>>> On Fri, Aug 1, 2014 at 12:10 PM, Cezar Andrei >> > wrote:
>>>
>>> If you don't provide a prefix, XmlBeans will automatically pick a
>>> prefix, and it tries to pick one that is part of the URI.
>>>
>>> Cezar
>>>
>>>
>>>
>>> On 07/28/2014 01:27 PM, Michael Bishop wrote:
>>>
>>> Hello all. I've recently changed the namespace of my schema.
>>> Now I'm getting the wrong prefix name and I'm not sure why.
>>

Re: Wrong namespace prefix in generated documents?

2014-08-07 Thread Michael Bishop
I've got to figure out how to debug it. Currently, it's in a Maven project
with the XMLBeans plugin running the schema compilation.

The map works when I call save(options) or xmlText(options), but not when
the document is created (Factory.newInstance(options)).

// Option that sets the namespace map.
XmlOptions options = ...;

MyDoc doc = MyDoc.Factory.newInstance(options);

System.out.println("Wrong prefix: " + doc.xmlText());
System.out.println("Right prefix: " + doc.xmlText(options));

The schema is spread out across multiple files. I'm going to try to create
a small test case to see if I can't reproduce this.


On Mon, Aug 4, 2014 at 4:31 PM, Cezar Andrei 
wrote:

> Michael,
>
> That's odd, please check that your namespace URI is exactly the same in
> both the schema and the map you're setting. Also, make sure the prefix you
> want is not already used in your document with a different URI.
>
> If it's still not working and you're not afraid of debugging, you can
> trace the ensureMapping method in Saver.java:757 .
> http://svn.apache.org/viewvc/xmlbeans/trunk/src/store/org/
> apache/xmlbeans/impl/store/Saver.java?view=markup
>
> Cezar
>
>
> On 08/02/2014 02:04 PM, Michael Bishop wrote:
>
>> OK, thanks for the information. Unfortunately, this doesn't seem to fix
>> the problem. I thought I'd tried the steps outlined in the linked blog
>> before, but I did it again, just in case.
>>
>> Here's the full schema definitions:
>>
>> Old:
>> http://www.w3.org/2001/XMLSchema";
>> *xmlns:xxx="http://..."*
>>
>>targetNamespace="http://...";
>>elementFormDefault="qualified">
>>
>> New:
>> http://www.w3.org/2001/XMLSchema";
>> *xmlns:xxx="yyy:aaa:bbb..."*
>>
>>targetNamespace="yyy:..."
>>elementFormDefault="qualified">
>>
>> As you can see, in both schemas, I'm declaring a namespace of *xxx*, but
>> it's only honored in the old schema. The only thing that's changed between
>> schemas is the namespace. I had a request from our customer to change it.
>> However, a call to:
>>
>>
>> MyGeneratedClass.Factory.newInstance() results in a document that looks
>> like this:
>>
>> 
>>
>> Applying a namespace map to an XmlOptions object doesn't seem to have any
>> effect. I've tried it with the call to MyGeneratedClass.Factory.newInstance()
>> and a call to MyGeneratedInstance.xmlText():
>>
>> XmlOptions options = new XmlOptions();
>> Map nsMap = new HashMap<>();
>> nsMap.put("yyy:aaa:bbb", "xxx");
>> options.setSaveSuggestedPrefixes(nsMap);
>>
>> // No change to output.
>> MyGeneratedClass.Factory.newInstance(options);
>> MyGeneratedInstance.xmlText(options);
>>
>> I guess I have two questions:
>>
>> 1. Why is the prefix declaration in my schema being ignored? *xmlns:xxx*
>> has never changed. It's only the value of the namespace that has changed.
>>
>> 2. I find it odd that Map has no effect either. Is there anything else I
>> should be looking into? I'm not sure if my schema is somehow "wrong" or I
>> have a setting in XMLBeans misconfigured. It's becoming more than just an
>> annoying problem. XPath statements are now broken since they employ the
>> *xxx* prefix. I'm not sure where to start tracking down the issue. Both the
>> guidance and the docs seem straightforward to me, yet I can't get it to
>> work properly.
>>
>>
>> Any guidance is appreciated. I'm on XMLBeans 2.5.0. If there's anything
>> more I can provide, I can do so.
>>
>> Michael Bishop
>>
>>
>> On Fri, Aug 1, 2014 at 12:10 PM, Cezar Andrei > > wrote:
>>
>> If you don't provide a prefix, XmlBeans will automatically pick a
>> prefix, and it tries to pick one that is part of the URI.
>>
>> Cezar
>>
>>
>>
>> On 07/28/2014 01:27 PM, Michael Bishop wrote:
>>
>> Hello all. I've recently changed the namespace of my schema.
>> Now I'm getting the wrong prefix name and I'm not sure why.
>>
>> Old namespace was:
>>
>> xmlns:*xxx*="http://ccc.bbb.aaa";
>>
>> New namespace is:
>>
>> xmlns:*xxx*="*yyy*:aaa:bbb:ccc"
>>
>> With the old namespace, the prefix for elements was xxx. Now
>> with the new namespace, the prefix fpr elements is *yyy*. It
>> seems switching from URL form to URI form has caused the
>> processor to start using the first part of the URI as the
>> prefix? This happens when I call the static
>> Factory.newInstance() on generated classes. Older documents
>> with the correct prefix still parse properly.
>>
>> It's not a big deal since the namespace is intact and things
>> work as they should, but I can't figure out why this is
>> happening. I don't declare xmlns:*yyy* anywhere in the schema
>> or xsdconfig files.
>>
>> Michael Bishop
>>
>>
>>
>> -
>> To unsubscribe, e-mail: user-unsubscr...@xmlbeans.apache.org
>>