Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.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 元素在WSDL中具有相同的名称和不同的类型_Java_Jaxb_Jax Ws_Wsdl2java - Fatal编程技术网

Java 元素在WSDL中具有相同的名称和不同的类型

Java 元素在WSDL中具有相同的名称和不同的类型,java,jaxb,jax-ws,wsdl2java,Java,Jaxb,Jax Ws,Wsdl2java,我得到了一个WSDL和模式文件。我使用这些文件在Java中创建存根。但是我在生成错误时遇到了一个错误(如下)。我知道问题是什么,只是不知道怎么解决。我知道问题是,有时PayLoadLength是字符串或整数 <xs:element name="PayloadLength" type="xs:string" minOccurs="0"/> 经过相当广泛的分析,问题似乎是在所谓的“包装风格”。引述: 注意:JAX-WS2.1规范中定义的“包装样式”和“非包装样式”的含义可能与直觉相反。

我得到了一个WSDL和模式文件。我使用这些文件在Java中创建存根。但是我在生成错误时遇到了一个错误(如下)。我知道问题是什么,只是不知道怎么解决。我知道问题是,有时PayLoadLength是字符串或整数

<xs:element name="PayloadLength" type="xs:string" minOccurs="0"/>

经过相当广泛的分析,问题似乎是在所谓的“包装风格”。引述:

注意:JAX-WS2.1规范中定义的“包装样式”和“非包装样式”的含义可能与直觉相反。包装器样式表示请求消息中的每个数据元素都有自己的Java参数,而非包装器样式表示包含所有数据元素的单个Java对象充当web服务方法调用的唯一参数

所以基本上问题是,如果请求和响应类型中有一些子元素具有相同的名称,那么它们基本上会映射到一个参数。如果它们有不同的类型,这会导致冲突,CXF会拒绝它们

解决此问题的一种方法是禁用包装器样式。您可以使用
binding.xml
文件执行此操作,如:

<jaxws:bindings node="wsdl:definitions" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
    <jaxws:enableWrapperStyle>false</jaxws:enableWrapperStyle>
</jaxws:bindings>


可能还有另一种方法,至少是错误消息,至少错误消息表明应该可以“使用JAXWS/JAXB绑定定制来重命名参数”。不幸的是,我无法找到适合此应用的绑定语法。

我认为我们缺少了一些东西。这真的是你的模式吗?如果
Request
Response
是完全独立的类型(根据您的代码),那么具有相同名称和不同类型的元素应该不会有任何问题。他们可能都扩展了超级类型吗?对不起,我更改了响应和请求的名称。我没有看到它们都扩展的超级类型。问题是,您发布的模式片段很可能不会产生您报告的问题。所以请发一封信。完整且可验证。在那之前,我将投票决定关闭。@lexicore我发布了架构文件。我只是在每次调用中都保留了PayLoadLength元素。您还需要wsdl文件吗?我可以使用
xjc
毫无问题地编译您的模式。我认为让MCVE准备好构建项目并通过GitHub共享是有意义的。那我去看看。
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a>-->
<xs:schema version="1.0" targetNamespace="xxxxxx" xmlns:tns="xxxxxxxxxx" xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <xs:element name="ABCBatchResultsAckSubmission" type="tns:ABCBatchResultsAckSubmission"/>

  <xs:element name="ABCBatchResultsAckSubmissionResponse" type="tns:ABCBatchResultsAckSubmissionResponse"/>

  <xs:element name="ABCBatchResultsRetrievalRequest" type="tns:ABCBatchResultsRetrievalRequest"/>

  <xs:element name="ABCBatchResultsRetrievalRequestResponse" type="tns:ABCBatchResultsRetrievalRequestResponse"/>

  <xs:element name="ABCBatchSubmission" type="tns:ABCBatchSubmission"/>

  <xs:element name="ABCBatchSubmissionAckRetrievalRequest" type="tns:ABCBatchSubmissionAckRetrievalRequest"/>

  <xs:element name="ABCBatchSubmissionAckRetrievalRequestResponse" type="tns:ABCBatchSubmissionAckRetrievalRequestResponse"/>

  <xs:element name="ABCBatchSubmissionResponse" type="tns:ABCBatchSubmissionResponse"/>

  <xs:complexType name="ABCBatchSubmissionAckRetrievalRequest">
    <xs:sequence>

        <xs:element name="PayloadLength" type="xs:string" minOccurs="0"/>

    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="ABCBatchSubmissionAckRetrievalRequestResponse">
    <xs:sequence>

    <xs:element name="PayloadLength" maxOccurs="1" minOccurs="0" type="xs:int"/>

    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="ABCBatchSubmission">
    <xs:sequence>

      <xs:element name="PayloadLength" type="xs:string" minOccurs="0"/>

    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="ABCBatchSubmissionResponse">
    <xs:sequence>

        <xs:element name="PayloadLength" maxOccurs="1" minOccurs="0" type="xs:int"/>


    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="ABCBatchResultsRetrievalRequest">
    <xs:sequence>

      <xs:element name="PayloadLength" type="xs:string" minOccurs="0"/>

    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="ABCBatchResultsRetrievalRequestResponse">
    <xs:sequence>

        <xs:element name="PayloadLength" maxOccurs="1" minOccurs="0" type="xs:int"/>

    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="ABCBatchResultsAckSubmission">
    <xs:sequence>

      <xs:element name="PayloadLength" type="xs:string" minOccurs="0"/>

    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="ABCBatchResultsAckSubmissionResponse">
    <xs:sequence>

        <xs:element name="PayloadLength" maxOccurs="1" minOccurs="0" type="xs:int"/>

    </xs:sequence>
  </xs:complexType>
</xs:schema>
<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.apache.cxf</groupId>
                <artifactId>cxf-codegen-plugin</artifactId>
                <version>3.2.1</version>
                <executions>
                    <execution>
                        <id>generate-sources</id>
                        <phase>generate-sources</phase>
                        <configuration>
                            <sourceRoot>${project.build.directory}/generated/cxf</sourceRoot>
                            <wsdlOptions>
                                <wsdlOption>
                                    <wsdl>${basedir}/src/main/resources/wsdl/CORETransactionService.wsdl</wsdl>
                                    <wsdlLocation>classpath:wsdl/CORETransactionService.wsdl</wsdlLocation>
                                </wsdlOption>
                            </wsdlOptions>
                        </configuration>
                        <goals>
                            <goal>wsdl2java</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
Execution generate-sources of goal org.apache.cxf:cxf-codegen-plugin:3.2.1:wsdl2java failed: Element PayloadLength has the same name with different types[{http://www.w3.org/2001/XMLSchema}string -- {http://
 www.w3.org/2001/XMLSchema}int]. This will cause a collision in wrapper style as per the spec. (org.apache.cxf:cxf-codegen-plugin:3.2.1:wsdl2java:generate-sources:generate-sources) 
 org.apache.maven.plugin.PluginExecutionException: Execution generate-sources of goal org.apache.cxf:cxf-codegen-plugin:3.2.1:wsdl2java failed: Element PayloadLength has the same name with different types[{http://
 www.w3.org/2001/XMLSchema}string -- {http://www.w3.org/2001/XMLSchema}int]. This will cause a collision in wrapper style as per the spec. at 
 org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:145) at org.eclipse.m2e.core.internal.embedder.MavenImpl.execute(MavenImpl.java:331) at 
 org.eclipse.m2e.core.internal.embedder.MavenImpl$11.call(MavenImpl.java:1362) at org.eclipse.m2e.core.internal.embedder.MavenImpl$11.call(MavenImpl.java:1) at 
 org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.executeBare(MavenExecutionContext.java:177) at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.execute(MavenExecutionContext.java:
 112) at org.eclipse.m2e.core.internal.embedder.MavenImpl.execute(MavenImpl.java:1360) at org.eclipse.m2e.core.project.configurator.MojoExecutionBuildParticipant.build(MojoExecutionBuildParticipant.java:52) at 
 org.eclipse.m2e.core.internal.builder.MavenBuilderImpl.build(MavenBuilderImpl.java:137) at org.eclipse.m2e.core.internal.builder.MavenBuilder$1.method(MavenBuilder.java:172) at 
 org.eclipse.m2e.core.internal.builder.MavenBuilder$1.method(MavenBuilder.java:1) at org.eclipse.m2e.core.internal.builder.MavenBuilder$BuildMethod$1$1.call(MavenBuilder.java:115) at 
 org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.executeBare(MavenExecutionContext.java:177) at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.execute(MavenExecutionContext.java:
 112) at org.eclipse.m2e.core.internal.builder.MavenBuilder$BuildMethod$1.call(MavenBuilder.java:105) at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.executeBare(MavenExecutionContext.java:177) 
 at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.execute(MavenExecutionContext.java:151) at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.execute(MavenExecutionContext.java:99) 
 at org.eclipse.m2e.core.internal.builder.MavenBuilder$BuildMethod.execute(MavenBuilder.java:86) at org.eclipse.m2e.core.internal.builder.MavenBuilder.build(MavenBuilder.java:200) at 
 org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:735) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:
 206) at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:246) at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:301) at 
 org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:304) at 
 org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:360) at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:383) at 
 org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:142) at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:232) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:56) 
 Caused by: org.apache.cxf.tools.common.ToolException: Element PayloadLength has the same name with different types[{http://www.w3.org/2001/XMLSchema}string -- {http://www.w3.org/2001/XMLSchema}int]. This 
 will cause a collision in wrapper style as per the spec. at org.apache.cxf.tools.wsdlto.WSDLToJavaContainer.validate(WSDLToJavaContainer.java:735) at 
 org.apache.cxf.tools.wsdlto.WSDLToJavaContainer.processWsdl(WSDLToJavaContainer.java:276) at org.apache.cxf.tools.wsdlto.WSDLToJavaContainer.execute(WSDLToJavaContainer.java:164) at 
 org.apache.cxf.tools.wsdlto.WSDLToJavaContainer.execute(WSDLToJavaContainer.java:412) at org.apache.cxf.tools.common.toolspec.ToolRunner.runTool(ToolRunner.java:105) at 
 org.apache.cxf.tools.wsdlto.WSDLToJava.run(WSDLToJava.java:113) at org.apache.cxf.tools.wsdlto.WSDLToJava.run(WSDLToJava.java:86) at 
 org.apache.cxf.maven_plugin.wsdl2java.WSDL2JavaMojo.generate(WSDL2JavaMojo.java:414) at org.apache.cxf.maven_plugin.AbstractCodegenMoho.execute(AbstractCodegenMoho.java:279) at 
 org.apache.cxf.maven_plugin.wsdl2java.WSDL2JavaMojo.execute(WSDL2JavaMojo.java:511) at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134) ... 31 more
<jaxws:bindings node="wsdl:definitions" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
    <jaxws:enableWrapperStyle>false</jaxws:enableWrapperStyle>
</jaxws:bindings>
        <plugin>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-codegen-plugin</artifactId>
            <version>3.2.1</version>
            <executions>
                <execution>
                    <id>generate-sources</id>
                    <phase>generate-sources</phase>
                    <configuration>
                        <wsdlOptions>
                            <wsdlOption>
                                <wsdl>${basedir}/src/main/resources/wsdl/My.wsdl</wsdl>
                                <wsdlLocation>classpath:wsdl/My.wsdl</wsdlLocation>
                                <bindingFiles>
                                    <bindingFile>${basedir}/src/main/resources/bindings.xml</bindingFile>
                                </bindingFiles>
                            </wsdlOption>
                        </wsdlOptions>
                    </configuration>
                    <goals>
                        <goal>wsdl2java</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>