You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@cxf.apache.org by "Barnabas Bodnar (JIRA)" <ji...@apache.org> on 2016/02/18 09:47:18 UTC
[jira] [Updated] (CXF-6783) ReflectionServiceFactoryBean generates
invalid WSDL if anonymousWrapperTypes==true
[ https://issues.apache.org/jira/browse/CXF-6783?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Barnabas Bodnar updated CXF-6783:
---------------------------------
Description:
ReflectionServiceFactoryBean has the public property _anonymousWrapperTypes_ controlling whether the type (XSD) of a message is represented as standalone, named type in the WSDL, or an anonymous, inline type (the default is _false_ -> standalone, named). Setting it to _true_ effectuates producing the inline, anonymous type, but this is, however, present also on top-level, as standalone one, making the WSDL invalid (top-level types must have a name):
{code:xml}
<wsdl:definitions>
<wsdl:types>
<xsd:schema>
<xsd:element name="m">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="x" type="xsd:int"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:complexType>
<xsd:sequence>
<xsd:element name="x" type="xsd:int"/>
</xsd:sequence>
</xsd:complexType>
...
</xsd:schema>
...
</wsdl:types>
...
<wsdl:definitions>
{code}
Correctly:
{code:xml}
<wsdl:definitions>
<wsdl:types>
<xsd:schema>
<xsd:element name="m">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="x" type="xsd:int"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
...
</xsd:schema>
...
</wsdl:types>
...
<wsdl:definitions>
{code}
Fix-proposal: use *new XmlSchemaComplexType(schema, !isAnonymousWrapperTypes())* in the line 1300 instead of *new XmlSchemaComplexType(schema, true)*.
{code:title=rt/wsdl/src/main/java/org/apache/cxf/wsdl/service/factory/ReflectionServiceFactoryBean.java|borderStyle=solid}
1289 private void createWrappedMessageSchema(ServiceInfo serviceInfo, AbstractMessageContainer wrappedMessage,
1290 AbstractMessageContainer unwrappedMessage, SchemaInfo info,
1291 QName wrapperName) {
1292
1293 XmlSchema schema = info.getSchema();
1294 info.setElement(null); // the cached schema will be no good
1295 XmlSchemaElement el = new XmlSchemaElement(schema, true);
1296 el.setName(wrapperName.getLocalPart());
1297
1298 wrappedMessage.getFirstMessagePart().setXmlSchema(el);
1299
1300 XmlSchemaComplexType ct = new XmlSchemaComplexType(schema, true);
1301
1302 if (!isAnonymousWrapperTypes()) {
1303 ct.setName(wrapperName.getLocalPart());
1304 el.setSchemaTypeName(wrapperName);
1305 }
1306 el.setSchemaType(ct);
{code}
was:
ReflectionServiceFactoryBean has the public property _anonymousWrapperTypes_ controlling whether the type (XSD) of a message is represented as standalone, named type in the WSDL, or an anonymous, inline type (the default is _false_, also standalone, named). Setting it to _true_ effectuates producing the inline, anonymous type, but this is, however, present also on top-level, as standalone one, making the WSDL invalid (top-level types must have a name):
{code:xml}
<wsdl:definitions>
<wsdl:types>
<xsd:schema>
<xsd:element name="m">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="x" type="xsd:int"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:complexType>
<xsd:sequence>
<xsd:element name="x" type="xsd:int"/>
</xsd:sequence>
</xsd:complexType>
...
</xsd:schema>
...
</wsdl:types>
...
<wsdl:definitions>
{code}
Correctly:
{code:xml}
<wsdl:definitions>
<wsdl:types>
<xsd:schema>
<xsd:element name="m">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="x" type="xsd:int"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
...
</xsd:schema>
...
</wsdl:types>
...
<wsdl:definitions>
{code}
Fix-proposal: use *new XmlSchemaComplexType(schema, !isAnonymousWrapperTypes())* in the line 1300 instead of *new XmlSchemaComplexType(schema, true)*.
{code:title=rt/wsdl/src/main/java/org/apache/cxf/wsdl/service/factory/ReflectionServiceFactoryBean.java|borderStyle=solid}
1289 private void createWrappedMessageSchema(ServiceInfo serviceInfo, AbstractMessageContainer wrappedMessage,
1290 AbstractMessageContainer unwrappedMessage, SchemaInfo info,
1291 QName wrapperName) {
1292
1293 XmlSchema schema = info.getSchema();
1294 info.setElement(null); // the cached schema will be no good
1295 XmlSchemaElement el = new XmlSchemaElement(schema, true);
1296 el.setName(wrapperName.getLocalPart());
1297
1298 wrappedMessage.getFirstMessagePart().setXmlSchema(el);
1299
1300 XmlSchemaComplexType ct = new XmlSchemaComplexType(schema, true);
1301
1302 if (!isAnonymousWrapperTypes()) {
1303 ct.setName(wrapperName.getLocalPart());
1304 el.setSchemaTypeName(wrapperName);
1305 }
1306 el.setSchemaType(ct);
{code}
> ReflectionServiceFactoryBean generates invalid WSDL if anonymousWrapperTypes==true
> ----------------------------------------------------------------------------------
>
> Key: CXF-6783
> URL: https://issues.apache.org/jira/browse/CXF-6783
> Project: CXF
> Issue Type: Bug
> Components: Services
> Affects Versions: 3.1.5
> Reporter: Barnabas Bodnar
> Priority: Minor
>
> ReflectionServiceFactoryBean has the public property _anonymousWrapperTypes_ controlling whether the type (XSD) of a message is represented as standalone, named type in the WSDL, or an anonymous, inline type (the default is _false_ -> standalone, named). Setting it to _true_ effectuates producing the inline, anonymous type, but this is, however, present also on top-level, as standalone one, making the WSDL invalid (top-level types must have a name):
> {code:xml}
> <wsdl:definitions>
> <wsdl:types>
> <xsd:schema>
> <xsd:element name="m">
> <xsd:complexType>
> <xsd:sequence>
> <xsd:element name="x" type="xsd:int"/>
> </xsd:sequence>
> </xsd:complexType>
> </xsd:element>
> <xsd:complexType>
> <xsd:sequence>
> <xsd:element name="x" type="xsd:int"/>
> </xsd:sequence>
> </xsd:complexType>
> ...
> </xsd:schema>
> ...
> </wsdl:types>
> ...
> <wsdl:definitions>
> {code}
> Correctly:
> {code:xml}
> <wsdl:definitions>
> <wsdl:types>
> <xsd:schema>
> <xsd:element name="m">
> <xsd:complexType>
> <xsd:sequence>
> <xsd:element name="x" type="xsd:int"/>
> </xsd:sequence>
> </xsd:complexType>
> </xsd:element>
> ...
> </xsd:schema>
> ...
> </wsdl:types>
> ...
> <wsdl:definitions>
> {code}
> Fix-proposal: use *new XmlSchemaComplexType(schema, !isAnonymousWrapperTypes())* in the line 1300 instead of *new XmlSchemaComplexType(schema, true)*.
> {code:title=rt/wsdl/src/main/java/org/apache/cxf/wsdl/service/factory/ReflectionServiceFactoryBean.java|borderStyle=solid}
> 1289 private void createWrappedMessageSchema(ServiceInfo serviceInfo, AbstractMessageContainer wrappedMessage,
> 1290 AbstractMessageContainer unwrappedMessage, SchemaInfo info,
> 1291 QName wrapperName) {
> 1292
> 1293 XmlSchema schema = info.getSchema();
> 1294 info.setElement(null); // the cached schema will be no good
> 1295 XmlSchemaElement el = new XmlSchemaElement(schema, true);
> 1296 el.setName(wrapperName.getLocalPart());
> 1297
> 1298 wrappedMessage.getFirstMessagePart().setXmlSchema(el);
> 1299
> 1300 XmlSchemaComplexType ct = new XmlSchemaComplexType(schema, true);
> 1301
> 1302 if (!isAnonymousWrapperTypes()) {
> 1303 ct.setName(wrapperName.getLocalPart());
> 1304 el.setSchemaTypeName(wrapperName);
> 1305 }
> 1306 el.setSchemaType(ct);
> {code}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)