.xsd不是此编译的一部分。这是.xjb的错误吗?

问题描述 投票:7回答:5

我试图在我的schemaLocation文件中更改xjb以使用不是使用URL的远程文件,而是使用也受版本控制的本地副本。

所以例如我的xjb文件有类似的东西

<?xml version="1.0" encoding="UTF-8"?>
<jxb:bindings
        xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
        xmlns:xsd="http://www.w3.org/2001/XMLSchema"
        xsd:ID="JaxbBindingsForWMiddleware"
        version="2.0">

    <jxb:bindings node="/xsd:schema"
                  schemaLocation="http://myserver:80/a/b/c/d/myxsd.xsd">

当我将其更改为本地副本时

schemaLocation="../../src/main/resources/myxsd.xsd">

mvn clean install会因类似的消息而失败

[警告]引起:com.sun.istack.SAXParseException2; systemId:file:/ E:/somefolder/somefolder/myjavaproject/target/bindings/myxjb.xjb; lineNumber:33; columnNumber:33; “file:/ E:/somefolder/somefolder/myjavaproject/target/bindings/mywsdl.wsdl”不是此编译的一部分。这是“file:/ E:/somefolder/somefolder/myjavaproject/target/bindings/myxjb.xjb”的错误吗?

我注意到它正在target目录中查找我的wsdl文件。我可以操纵schemaLocation,使其指向src目录。然后路径存在,但消息仍然存在。

我也可以将wsdl放在目标目录中,java尝试在其中找到它,但在这种情况下,消息保持不变。

所以看起来需要特定的东西来使它成为这个编译的一部分。应该怎么做才能以正确的方式编译它?

java xsd
5个回答
4
投票

在我的环境(版本2.2)中,只有当文件位于专用文件夹(src / main / xsd / schema.xsd中的模式和绑定ind src / main / xsb / binding.xsb)并且绑定文件相对于模式引用时,它才起作用:schemaLocation =“../ xsd / schema.xsd”

它看起来真的很脆弱。


3
投票

它在我在插件配置中的pom-file中添加我的xsd后开始工作,如下所示:

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

                <bindingFiles>
                    <bindingFile>bindings.xjb</bindingFile>
                    <bindingFile>../xsd/egrul.xsd</bindingFile>
                    <bindingFile>../xsd/arrays.xsd</bindingFile>
                </bindingFiles>

1
投票

在查看问题时,我可以建议以下步骤:

首先,假设您使用一些插件来生成存根。我使用cxf-codegen-plugin(你可以使用任何),重要的一步是定义你的绑定文件的位置,让我们说它里面的资源\ wsdl 这是片段:

<plugin>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-codegen-plugin</artifactId>
    <version>${cxf.version}</version>
    <configuration>
        <encoding>UTF-8</encoding>
    </configuration>
    <executions>
        <execution>
            <id>generate-sources</id>
            <phase>generate-sources</phase>
            <configuration>
                <wsdlOptions>
                    <wsdlOption>
                        <wsdl>${basedir}/src/main/resources/wsdl/YOUR_WSDL_NAME.wsdl</wsdl>
                        <wsdlLocation>classpath:wsdl/YOUR_WSDL_NAME.wsdl</wsdlLocation>
                        <extraargs>
                            <extraarg>-xjc-Xts</extraarg>
                        </extraargs>
                        <bindingFiles>
                            <bindingFile>${basedir}/src/main/resources/wsdl/binding.xml</bindingFile>
                        </bindingFiles>
                    </wsdlOption>
                </wsdlOptions>
            </configuration>
            <goals>
                <goal>wsdl2java</goal>
            </goals>
        </execution>
    </executions>

    <dependencies>
        <dependency>
            <groupId>org.apache.cxf.xjcplugins</groupId>
            <artifactId>cxf-xjc-ts</artifactId>
            <version>${cxf.version}</version>
        </dependency>
    </dependencies>
</plugin>

接下来,现在执行“mvn generate-sources”时,maven知道在哪里查找绑定文件。我们假设您还将xsd文件放在resources \ wsdl文件夹中(您可以使用任何路径) 我们来看看binding.xml的片段

<jxb:bindings schemaLocation="YOUR_XSD_FILE.xsd" node="/xs:schema">
        .....
</jxb:bindings>

由于您已经在maven插件中定义了绑定文件路径,并且您的xsd也在该路径中,因此您无需在绑定文件的schemaLocation中再次定义此路径。


0
投票

我成功了

  1. 将模式和绑定放在src / main / resources中 SRC /主/资源/ myxsd.xsd SRC /主/资源/ mybindings.xjb
  2. 指向要运行xjc的maven插件来查找那里的文件
  3. 在绑定文件中使用 的schemaLocation = “myxsd.xsd”

如果你想在src / main / resources下添加一些目录,你当然可以这样做 - 你必须找出在指定schemaLocation时使用的正确相对路径。


0
投票

我在编译期间收到此错误,因为我的IDE已使用JAXB编译在包下添加了bin/目录。它是通过使用rm -rf BaseDirectory/bin/rm -rf BaseDirectory; git co BaseDirectory来修复的。后者可能更好/更完整。

(Eclipse,我很少使用,将输出编译成bin/,而IntelliJ IDEA或raw gradle编译成build/

© www.soinside.com 2019 - 2024. All rights reserved.