Java 将s:element和s:complexType命名为相同的名称
将s:element和s:complexType命名为相同的名称是否合法? 您可以看到以下代码,元素和complextype具有完全相同的名称 这是wsdl文件的一块Java 将s:element和s:complexType命名为相同的名称,java,xml,web-services,cxf,Java,Xml,Web Services,Cxf,将s:element和s:complexType命名为相同的名称是否合法? 您可以看到以下代码,元素和complextype具有完全相同的名称 这是wsdl文件的一块 <s:element name="ProcessTaskActionResponse"> <s:complexType> <s:sequence> <s:element minOccurs="0" maxOccurs="1" name="ProcessTaskActionRe
<s:element name="ProcessTaskActionResponse">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="ProcessTaskActionResult" type="tns:ProcessTaskActionResponse"/>
</s:sequence>
</s:complexType>
</s:element>
<s:complexType name="ProcessTaskActionResponse">
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="TaskId" type="tns:ArrayOfServerId"/>
<s:element minOccurs="1" maxOccurs="1" name="Success" type="s:boolean"/>
<s:element minOccurs="0" maxOccurs="1" name="ActionPerformedLabel" type="s:string"/>
<s:element minOccurs="0" maxOccurs="1" name="Errors" type="tns:ArrayOfString"/>
<s:element minOccurs="1" maxOccurs="1" name="RemovedFromTaskList" type="s:boolean"/>
</s:sequence>
</s:complexType>
是的,在XML模式中使用相同名称的复杂类型和元素是合法的 由于您的问题被标记为[java]和[web服务],因此您可能正在使用JAXB(通过JAX-WS)从XML模式生成类。在这种情况下,由于复杂类型和元素(具有匿名复杂类型)具有相同的名称,因此需要使用外部绑定文件重命名生成的类之一
更新
猜对了!JAXB解析器引发异常,主要原因是 命名冲突,我的问题是为什么JAXB不喜欢它是否合法 是吗 将复杂类型转换为Java类。对于命名的复杂类型,结果类名派生自复杂类型名,对于匿名复杂类型,结果类名派生自封闭元素。在您的例子中,这将导致两个类具有JAXB所抱怨的相同名称 重命名对应于XML元素的类(binding.XML)
重命名与复杂类型(binding.xml)对应的类
关于使用相同名称的元素和ComplexType是否正确,这里是W3中专门授权它的部分: 第2.5节
“例如,相同的名称可以出现在类型定义和元素声明中,两者之间没有冲突或必要的关系。”猜得好!JAXB解析器抛出了一个异常,主要是因为命名冲突,我的问题是为什么JAXB不喜欢它是否合法?@shanyangqu-我已经用一些额外的信息更新了我的答案,这些信息应该会有所帮助。
<jxb:bindings
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
version="2.1">
<jxb:bindings schemaLocation="your-schema.xsd">
<jxb:bindings node="//xs:element[@name='ProcessTaskActionResponse']/complexType">
<jxb:class name="ProcessTaskActionResponseElement"/>
</jxb:bindings>
</jxb:bindings>
</jxb:bindings>
<jxb:bindings
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
version="2.1">
<jxb:bindings schemaLocation="your-schema.xsd">
<jxb:bindings node="//xs:complexType[@name='ProcessTaskActionResponse']">
<jxb:class name="ProcessTaskActionResponseType"/>
</jxb:bindings>
</jxb:bindings>
</jxb:bindings>