当前位置: 首页 > 知识库问答 >
问题:

Java WSIMPort。不准确的WSDL。如何创建合适的外部绑定文件?

羊舌富
2023-03-14

所以我在POM文件中有wsimport作为插件:

      <plugin>
            <groupId>org.jvnet.jax-ws-commons</groupId>
            <artifactId>jaxws-maven-plugin</artifactId>
            <version>2.3</version>
            <executions>
                <execution>
                    <id>wsimport-from-jdk</id>
                    <goals>
                        <goal>wsimport</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>

                <!--<wsdlUrls>-->
                <!--<wsdlUrl>-->
                <!--https://api.casebook.ru/WebService.svc?singleWsdl-->
                <!--</wsdlUrl>-->
                <!--</wsdlUrls>-->

                <wsdlDirectory>src/main/resources/wsdl</wsdlDirectory>

                <wsdlFiles>
                    <wsdlFile>WebServiceSVC.wsdl</wsdlFile>
                </wsdlFiles>
                <vmArgs>
                    <vmArg>-Djavax.xml.accessExternalSchema=all</vmArg>
                </vmArgs>

                <keep>true</keep>
                <verbose>true</verbose>

                <packageName>com.kirillch.objs</packageName>

                <sourceDestDir>target/generatedclasses</sourceDestDir>

                <bindingDirectory>
                    ${basedir}/src/main/resources/bindings
                </bindingDirectory>

                <bindingFiles>
                    <bindingFile>bindings.xjb</bindingFile>
                </bindingFiles>

            </configuration>

        </plugin>

启动后,我会收到以下警告:

[警告]src-resolve:无法将名称“checkshortprobintinforequest”解析为(n)个“type definition”组件。
文件第53行:/d://dev/test-prj/irule/pravoru/src/main/resources/wsdl/webservicesvc.wsdl#types?schema1

<?xml version="1.0" encoding="UTF-8"?>
<jaxb:bindings version="2.1"
               xmlns:jaxb="http://java.sun.com/xml/ns/jaxb">

    <jaxb:bindings schemaLocation="file:../wsdl/WebServiceSVC.wsdl#types?schema1">
        <jaxb:bindings node="//xsd:element[@name='CheckShortBankruptInfoRequest']">
            <jaxb:class name="CheckShortBankruptInfoRequestEl"/>
        </jaxb:bindings>
    </jaxb:bindings>

</jaxb:bindings>

[ERROR]XPath错误:com.sun.org.apache.XPath.internal.domapi.xPathStylesHeetDom3Exception:前缀必须解析为文件的名称空间:xsd第6行:/d://dev/test-prj/irule/pravoru/src/main/resources/bindings/bindings.xjb

有人能帮我解决这个问题吗?Live WSDL您可以在这里尝试:https://api.casebook.ru/webservice.svc

共有1个答案

岳昊空
2023-03-14

我在这里找到了合适的解决方案:https://blogs.oracle.com/geertjan/error-two-declarations-cause-a-collaction-in-the-objectFactory-class

所有冲突都通过以下方式解决:

  1. 我通过SoapUI将所有xsd作为单独的文件从我的wsdl中接收(这是一个快速的解决方案,但是以后我发现了如何通过wsdl的url访问它们)
  2. 从WSDL中删除所有xsd Shema。在其他情况下,类将是重复的。
  3. 我将所有XSD-类放在单独的包中,并添加一些后缀。
<?xml version="1.0" encoding="UTF-8"  standalone="yes"?>
<jaxb:bindings version="2.1"
               xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"

    <jaxb:bindings
            schemaLocation="../xsd/egrul.xsd">
        <jaxb:schemaBindings>
            <jaxb:package name="ru.spi2.javaee.custom.pravoru.classes.egrul"/>
            <jaxb:nameXmlTransform>
                <jaxb:typeName suffix="Type"/>
                <jaxb:elementName suffix="Element"/>
            </jaxb:nameXmlTransform>
        </jaxb:schemaBindings>
    </jaxb:bindings>

    <jaxb:bindings
            schemaLocation="../xsd/egrip.xsd">
        <jaxb:schemaBindings>
            <jaxb:package name="ru.spi2.javaee.custom.pravoru.classes.egrip"/>
            <jaxb:nameXmlTransform>
                <jaxb:typeName suffix="Type"/>
                <jaxb:elementName suffix="Element"/>
            </jaxb:nameXmlTransform>
        </jaxb:schemaBindings>
    </jaxb:bindings>
     ...

</jaxb:bindings>
     <plugin>
            <groupId>org.jvnet.jax-ws-commons</groupId>
            <artifactId>jaxws-maven-plugin</artifactId>
            <version>2.3</version>
            <configuration>

                <!--<wsdlUrls>-->
                <!--<wsdlUrl>-->
                <!--https://api.casebook.ru/WebService.svc?singleWsdl-->
                <!--</wsdlUrl>-->
                <!--</wsdlUrls>-->

                <wsdlDirectory>src/main/resources/wsdl</wsdlDirectory>

                <wsdlFiles>
                    <wsdlFile>WebServiceSVC.wsdl</wsdlFile>
                </wsdlFiles>
                <vmArgs>
                    <vmArg>-Djavax.xml.accessExternalSchema=all</vmArg>
                </vmArgs>
                <args>
                    <arg>-B-XautoNameResolution</arg>
                    <arg>-XadditionalHeaders</arg>
                </args>
                <extension>true</extension>

                <keep>true</keep>
                <verbose>true</verbose>

                <!--<packageName>ru.spi2.javaee.custom.pravoru.ws</packageName>-->

                <sourceDestDir>target/generatedclasses</sourceDestDir>

                <bindingDirectory>
                    src/main/resources/binding
                </bindingDirectory>

                <bindingFiles>
                    <bindingFile>bindings.xjb</bindingFile>
                    <bindingFile>../xsd/egrul.xsd</bindingFile>
                    <bindingFile>../xsd/arrays.xsd</bindingFile>
                    <bindingFile>../xsd/BankruptMessages.xsd</bindingFile>
                    <bindingFile>../xsd/CommonData.xsd</bindingFile>
                    <bindingFile>../xsd/CommonModels.xsd</bindingFile>
                    <bindingFile>../xsd/CommonSqlData.xsd</bindingFile>
                    <bindingFile>../xsd/egrip.xsd</bindingFile>
                    <bindingFile>../xsd/enums.xsd</bindingFile>
                    <bindingFile>../xsd/FNSModel.xsd</bindingFile>
                    <bindingFile>../xsd/message.xsd</bindingFile>
                    <bindingFile>../xsd/organizations.xsd</bindingFile>
                    <bindingFile>../xsd/serialization.xsd</bindingFile>
                    <bindingFile>../xsd/ServiceModels.xsd</bindingFile>
                    <bindingFile>../xsd/system.xsd</bindingFile>
                    <bindingFile>../xsd/tempuri.xsd</bindingFile>
                    <bindingFile>../xsd/UIFounders.xsd</bindingFile>
                    <bindingFile>../xsd/ULFounders.xsd</bindingFile>
                    <bindingFile>../xsd/WSModels.xsd</bindingFile>
                    <bindingFile>../xsd/Types.xsd</bindingFile>
                </bindingFiles>

            </configuration>
            <executions>
                <execution>
                    <id>wsimport-from-jdk</id>
                    <goals>
                        <goal>wsimport</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
 类似资料:
  • 我正在尝试创建一个DateTimeFormatter对象,其模式符合以下时间表达式:2016-07-22T00:00:00.000-05:00。我正在尝试使用带有上述输入字符串的DateTimeFormatter类创建DateTime对象。 我已经尝试了下面表达式的许多不同版本,但目前被困在时区片"-05:00",在那里我得到了我的jUnit测试用例的错误: 我使用的当前格式模式是: 我也尝试过:

  • 此输出包括 1的MAC地址。无线LAN适配器WiFi 2。无线LAN适配器本地连接 3。以太网适配器蓝牙 4。以太网适配器虚拟盒 无论我是否连接到互联网,它都显示相同的输出。所以我的问题是,我如何确定我连接的是哪一个,即如果我连接并使用WiFi互联网,我需要WiFi MAC,如果我使用网线连接,我需要它。 并告诉如何使用Java更改/欺骗MAC地址。

  • 问题内容: 我需要创建一个简单但准确的计时器。 这是我的代码: 恰好在3600秒后,它将打印约3500秒。 为什么不准确? 如何创建准确的计时器? 问题答案: 为什么不准确? 因为您正在使用setTimeout()或setInterval()。他们不能被信任,没有针对他们的准确性保证。它们被允许 任意滞后,并且它们不能保持恒定的步伐而是趋向于漂移(如您所观察到的)。 如何创建准确的计时器? 使用该

  • 我正在将文件上传到Amazon s3 bucket,并且可以访问InputStream和一个包含文件的MIME类型但不是原始文件名的字符串。在将文件推到S3之前,由我来实际创建文件名和扩展名。是否有库或方便的方法从MIME类型中确定要使用的适当扩展? 我已经看到了一些关于Apache Tika库的引用,但这似乎有些过头了,我还没有能够让它成功地检测到文件扩展名。从我所能收集到的信息来看,这段代码应

  • 我必须“释放”一些C代码。基本上,这段代码需要编译一个C 11编译器和一些外部库(特别是gmp、gsl、mpfr库)。 因此,基本上要使用的makefile必须在使用之前正确配置(因为实际的结构取决于编译器的安装位置和其他库的位置)。 有没有办法在使用makefile和make命令之前“预配置”makefile?

  • 问题内容: 当我对运行xjc时,出现很多错误: ....等等。 我已经尝试使用docbook版本4.5和版本5.0,但是结果相同。 任何指针都会被忽略。谢谢。 问题答案: 您可以将以下绑定文件与DocBook版本5 XML Schema一起使用: 绑定文件 包含绑定的命令行为: