Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将s:element和s:complexType命名为相同的名称_Java_Xml_Web Services_Cxf - Fatal编程技术网

Java 将s:element和s:complexType命名为相同的名称

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和s:complexType命名为相同的名称是否合法? 您可以看到以下代码,元素和complextype具有完全相同的名称 这是wsdl文件的一块

<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>