Java &引用;JAXWS-wsimport“;表示XPath在“中为空”;jaxb文件绑定";

Java &引用;JAXWS-wsimport“;表示XPath在“中为空”;jaxb文件绑定";,java,xpath,jaxb,wsdl,wsimport,Java,Xpath,Jaxb,Wsdl,Wsimport,我正在尝试使用jaxws-wsimport生成存根文件。 在WSDL中有两种相互冲突的类型: 第68行: 第119行: 原因是wsimport不保留下划线字符“\u1”,并认为这两个名称是相同的 我创建了一个jaxb绑定文件来显式地命名生成的Java类 但是wsimport说: [ERROR] XPath error: null line 11 of file:/C:/Users/deyan/ss_workspace/MVS%20Services/src/is/mvs/services/ws/x

我正在尝试使用jaxws-wsimport生成存根文件。 在WSDL中有两种相互冲突的类型: 第68行:

第119行:

原因是wsimport不保留下划线字符“\u1”,并认为这两个名称是相同的

我创建了一个jaxb绑定文件来显式地命名生成的Java类

但是wsimport说:

[ERROR] XPath error: null
line 11 of file:/C:/Users/deyan/ss_workspace/MVS%20Services/src/is/mvs/services/ws/xjb/companyInfo.xjb
我已经在中测试了xpath字符串 它真正返回元素

请帮助理解为什么wsimport说xpath为null

提前谢谢你

这是我的WSDL:

这是jaxb绑定文件:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<jaxws:bindings
  xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
  xmlns:jaxws="http://java.sun.com/xml/ns/jaxws"
  xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" jaxb:version="2.1"
  xmlns:xs="http://www.w3.org/2001/XMLSchema"
  wsdlLocation="https://gognxml.uh.is/xml_service.asmx?WSDL">

  <enableWrapperStyle>true</enableWrapperStyle>
  <enableAsyncMapping>false</enableAsyncMapping>
  <jaxws:bindings          node="wsdl:definitions/wsdl:types/s:schema/s:complexType[@name='Faersla']/s:sequence/s:element[@name='DAGS_BROTTFELLT']">
    <jaxb:class name="Dags_Brottfellt"/>
  </jaxws:bindings>
</jaxws:bindings>

真的
假的

我注意到的一件事是XPath表达式使用了
s
名称空间前缀(例如
s:schema
),但我没有看到在任何地方声明名称空间前缀。它应该在
元素之一上声明吗?或者这些前缀应该在哪里声明?通常,在输入XML中声明它们是不够的。但我对wsimport一无所知


注意:看起来没有使用
xs
前缀,所以可能应该是
S
。正如您在评论中已经确认的那样::-)

我注意到XPath表达式使用了
s
名称空间前缀(例如
s:schema
),但我看不到在任何地方声明名称空间前缀。它应该在
元素之一上声明吗?或者这些前缀应该在哪里声明?通常,在输入XML中声明它们是不够的。但我对wsimport一无所知


注意:看起来没有使用
xs
前缀,所以可能应该是
S
。正如您在评论中已经确认的那样::-)

我注意到的一点是XPath表达式使用了
s
名称空间前缀(例如
s:schema
),但我没有看到在任何地方声明名称空间前缀。它应该在
元素之一上声明吗?或者这些前缀应该在哪里声明?通常,在输入XML中声明它们是不够的。但是我对wsimport一无所知。@LarsH受您的评论启发,我在jaxb文件中做了这样的更改,它成功了:xmlns:s=”“我已将xmlns:xs重命名为xmlns:s谢谢!如果你发布答案,我会接受。你应该更喜欢该名称空间的标准前缀
xs
xsd
,而不是使用
s
,这可能会让人困惑。请注意,xpath中的前缀不需要与wsdl中的前缀匹配,它们只需要绑定到相同的名称空间URN。我注意到,xpath表达式使用
s
名称空间前缀(例如
s:schema
),但我看不到在任何地方声明名称空间前缀。它应该在
元素之一上声明吗?或者这些前缀应该在哪里声明?通常,在输入XML中声明它们是不够的。但是我对wsimport一无所知。@LarsH受您的评论启发,我在jaxb文件中做了这样的更改,它成功了:xmlns:s=”“我已将xmlns:xs重命名为xmlns:s谢谢!如果你发布答案,我会接受。你应该更喜欢该名称空间的标准前缀
xs
xsd
,而不是使用
s
,这可能会让人困惑。请注意,xpath中的前缀不需要与wsdl中的前缀匹配,它们只需要绑定到相同的名称空间URN。这暗示了正确的答案,但实际上并没有这样说:您还必须在根元素中定义xpath中使用的所有名称空间。这暗示了正确的答案,但实际上并没有这样说:您还必须在根元素中定义xpath中使用的所有名称空间。