[prev in list] [next in list] [prev in thread] [next in thread]
List: wss4j-dev
Subject: [jira] [Created] (XMLSCHEMA-51) Problem with included schemas with attribute group references
From: "Fady Moussallam (JIRA)" <jira () apache ! org>
Date: 2018-03-17 9:08:00
Message-ID: JIRA.13145939.1521277675000.43903.1521277680025 () Atlassian ! JIRA
[Download RAW message or body]
Fady Moussallam created XMLSCHEMA-51:
----------------------------------------
Summary: Problem with included schemas with attribute group references
Key: XMLSCHEMA-51
URL: https://issues.apache.org/jira/browse/XMLSCHEMA-51
Project: XmlSchema
Issue Type: Question
Reporter: Fady Moussallam
Hello,
I am using version 2.2.3.
I have a problem with a combination of included schemas and attribute group \
references.
Say you have schemaA including schemaB. schemaB does not have a default namespace, \
nor a target namespace, since it is meant to be included. It therefore inherits the \
namespace of the including schema (in this case schemaA).
The problem arises if schemaB contains markup like this:
{code}
<xs:attributeGroup ref="QuantityGroup"/>
...
</xs:attributeGroup>
{code}
In org.apache.ws.commons.schema.SchemaBuilder#handleAttributeGroupRef the reference \
QName is obtained with the getRefQName(String pName, Node pNode) method.
In this method, the namespace is derived using the \
NodeNamespaceContext.getNamespaceContext(pNode) method. This one in turn determines \
available namespaces directly from the DOM using \
PrefixCollector.searchAllPrefixDeclarations(pNode).
Problem is that from a DOM standpoint schemaB does not contain any namespace \
declarations. So the reference QName end up having no namespace.
This seems wrong and creates problems when later on you want to find the referenced \
group using XmlSchemaCollection#getAttributeGroupByName(QName name) which returns \
null.
I can fix my issue in SchemaBuilder#getRefQName by doing this:
{code}
...
if (offset == -1) {
uri = pContext.getNamespaceURI(Constants.DEFAULT_NS_PREFIX);
if (Constants.NULL_NS_URI.equals(uri)) {
if (currentSchema.getLogicalTargetNamespace().isEmpty()) {
return new QName(Constants.NULL_NS_URI, pName);
} else {
return new QName(currentSchema.getLogicalTargetNamespace(), pName);
}
}
localName = pName;
prefix = Constants.DEFAULT_NS_PREFIX;
} else {
...
{code}
But I am not sure if there are any side effects.
Any opinion or advice on this would be very appreciated.
Thank you
Fady
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@ws.apache.org
For additional commands, e-mail: dev-help@ws.apache.org
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic