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

时间:2015-10-20 08:49:17

标签: java xsd

我正在尝试更改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;   的systenId:   文件:/ E:/somefolder/somefolder/myjavaproject/target/bindings/myxjb.xjb;   lineNumber:33; columnNumber:33;   “文件:/ E:/somefolder/somefolder/myjavaproject/target/bindings/mywsdl.wsdl”   不是这个汇编的一部分。这是一个错误   “文件:/ E:/somefolder/somefolder/myjavaproject/target/bindings/myxjb.xjb”?

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

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

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

5 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分: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中再次定义此路径。

答案 2 :(得分:0)

我取得了成功

  1. 将架构和绑定放在src / main / resources

    的src /主/资源/ myxsd.xsd

    的src /主/资源/ mybindings.xjb

  2. 指向要运行xjc的maven插件以查找那里的文件

  3. 在绑定文件中使用

    的schemaLocation =&#34; myxsd.xsd&#34;

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

答案 3 :(得分:0)

我在编译期间收到此错误,因为我的IDE在JAXB编译的软件包下添加了一个class RevPashPageView(TemplateView): template_name = "softrest/revPash.html" def get(self, request, *args, **kwargs): content = request.GET.get('content', None) print("TEXTO - " + str(content)) date_range = request.GET.get("ref_date", None) # This is your variable return render(request, self.template_name, {'output':output}) 目录。通过使用bin/rm -rf BaseDirectory/bin/进行了修复。后者可能更好/更完整。

(我很少使用的Eclipse将输出编译成rm -rf BaseDirectory; git co BaseDirectory,而IntelliJ IDEA或原始gradle编译成bin/

答案 4 :(得分:0)

就我而言,我只需要更新maven-jaxb2-plugin版本:

<groupId>org.jvnet.jaxb2.maven2</groupId>
                <artifactId>maven-jaxb2-plugin</artifactId>
                <version>0.14.0</version>