我正在尝试使用Axis2 wsdl2java从大量模式(总计15k行)中生成java存根,并且遇到了以下复杂类型的问题。最初,在我的模式文件上运行该工具时,我收到了一条不起眼的错误消息,“不支持的内容简单内容!”为了查找此错误的原因,我从源代码下载并部署了Axis2项目,找到了错误字符串并检查了导致问题的元素。我认为问题的根源在于嵌套一个复杂的类型,在简单内容中包含简单的内容。
我有两个例子,SequencedTextType (失败)和OpenTextType (继承)。这两种类型的内容都是TextType的扩展。这将使我们更容易发现问题并提供解释。
失败的 SequencedTextType:
<xs:element name="Reason" type="SequencedTextType" id="oagis-id-fa892eb1e28c46088bc50394c62a8655"/>
<xs:complexType name="SequencedTextType" id="oagis-id-51e010d7a1e24ebe89fcf58989fefd1b">
<xs:complexContent>
<xs:extension base="TextType">
<xs:attribute name="sequenceNumber" type="NumberType_B98233" id="oagis-id-39a5a53826024a65a2291f50d9feecd3"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:simpleType name="NumberType_B98233" id="oagis-id-d614ed8726ff482c9c5a8183d735d9ed">
<xs:restriction base="xs:integer"/>
</xs:simpleType>传递 OpenTextType:
<xs:complexType name="OpenTextType" id="oagis-id-5840f7a57dd949ababcd1eb394b2840c">
<xs:simpleContent>
<xs:extension base="TextType">
<xs:attribute name="typeCode" type="CodeType_1E7368" id="oagis-id-2780e69800934662a4782be31c2bacf6"
use="optional"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:simpleType name="CodeType_1E7368" id="oagis-id-d2f721a297684b538e7dbb88cf5526bc">
<xs:restriction base="xs:token"/>
</xs:simpleType>共享 TextType:
<xs:complexType name="TextType" id="oagis-id-d97b8cf6a26f408db148163485796d15">
<xs:simpleContent>
<xs:extension base="TextType_62S0B4"/>
</xs:simpleContent>
</xs:complexType>
<xs:complexType name="TextType_62S0B4" id="oagis-id-89be97039be04d6f9cfda107d75926b4">
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="languageCode" type="clm56392A20081107_LanguageCodeContentType" id="oagis-id-c8d0c7094d7d4fbeb7e50fd20a17c1b3" use="optional"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:simpleType name="clm56392A20081107_LanguageCodeContentType" id="oagis-id-c5e8ac8c44894e54a147a870136da686">
<xs:restriction base="xs:normalizedString"/>
</xs:simpleType>Axis2方法:
private void copyMetaInfoHierarchy(BeanWriterMetaInfoHolder metaInfHolder,
QName baseTypeName,
XmlSchema parentSchema)
throws SchemaCompilationException {
//... Code omitted for clarity
// see whether this type is also extended from some other type first
// if so proceed to set their parents as well.
if (type instanceof XmlSchemaComplexType) {
XmlSchemaComplexType complexType = (XmlSchemaComplexType) type;
if (complexType.getContentModel() != null) {
XmlSchemaContentModel content = complexType.getContentModel();
if (content instanceof XmlSchemaComplexContent) {
//continue recursion
} else if (content instanceof XmlSchemaSimpleContent) {
/***** TextType throws error in this branch *****/
throw new SchemaCompilationException(
SchemaCompilerMessages.getMessage("schema.unsupportedcontenterror", "Simple Content"));
} else {
throw new SchemaCompilationException(
SchemaCompilerMessages.getMessage("schema.unknowncontenterror"));
}
}
//Do the actual parent setting
metaInfHolder.setAsParent(baseMetaInfoHolder);
}
//... Code omitted for clarity
}下面是相关的错误消息:
造成: org.apache.axis2.schema.SchemaCompilationException:不支持的内容简单的内容!在org.apache.axis2.schema.SchemaCompiler.copyMetaInfoHierarchy(SchemaCompiler.java:1396) at org.apache.axis2.schema.SchemaCompiler.processComplexContent(SchemaCompiler.java:1279) at org.apache.axis2.schema.SchemaCompiler.processContentModel(SchemaCompiler.java:1228) at org.apache.axis2.schema.SchemaCompiler.processComplexType(SchemaCompiler.java:1172) at org.apache.axis2.schema.SchemaCompiler.processNamedComplexSchemaType(SchemaCompiler.java:1092) at org.apache.axis2.schema.SchemaCompiler.processSchema(SchemaCompiler.java:1006)在org.apache.axis2.schema.SchemaCompiler.processElement(SchemaCompiler.java:772) at org.apache.axis2.schema.SchemaCompiler.processElement(SchemaCompiler.java:604) at org.apache.axis2.schema.SchemaCompiler.process(SchemaCompiler.java:2052) at org.apache.axis2.schema.SchemaCompiler.processParticle(SchemaCompiler.java:1935) at org.apache.axis2.schema.SchemaCompiler.processComplexContent(SchemaCompiler.java:1283) at org.apache.axis2.schema.SchemaCompiler.processContentModel(SchemaCompiler.java:1228)在org.apache.axis2.schema.SchemaCompiler.processComplexType(SchemaCompiler.java:1172) at org.apache.axis2.schema.SchemaCompiler.processNamedComplexSchemaType(SchemaCompiler.java:1092) at org.apache.axis2.schema.SchemaCompiler.processComplexContent(SchemaCompiler.java:1261) at org.apache.axis2.schema.SchemaCompiler.processContentModel(SchemaCompiler.java:1228) at org.apache.axis2.schema.SchemaCompiler.processComplexType(SchemaCompiler.java:1172) at org.apache.axis2.schema.SchemaCompiler.processNamedComplexSchemaType(SchemaCompiler.java:1092)在org.apache.axis2.schema.SchemaCompiler.processSchema(SchemaCompiler.java:1006) at org.apache.axis2.schema.SchemaCompiler.processElement(SchemaCompiler.java:645) at org.apache.axis2.schema.SchemaCompiler.processElement(SchemaCompiler.java:615) at org.apache.axis2.schema.SchemaCompiler.compile(SchemaCompiler.java:423) at org.apache.axis2.schema.SchemaCompiler.compile(SchemaCompiler.java:292) at org.apache.axis2.schema.ExtensionUtility.invoke(ExtensionUtility.java:102)
我希望了解一下为什么OpenTextType可以通过附加的Axis2方法,以及为什么SequencedTextType不能。谢谢。
发布于 2015-02-17 15:16:42
我不太清楚为什么会这样。但是,我从此链接那里找到了解决方案
当我使用-d xmlbeans命令添加wsdl2java时,它对我起了作用
默认的绑定是亚行,它与这个简单的内容有一些问题。这似乎已经在Axis2 1.7.x版本中得到修正。
https://stackoverflow.com/questions/25630015
复制相似问题