Java JAX-WS在不同的URL中有XSD模式

Java JAX-WS在不同的URL中有XSD模式,java,web-services,xsd,wsdl,jax-ws,Java,Web Services,Xsd,Wsdl,Jax Ws,我使用JAX-WS创建了一个小型web服务。WSDL文件有如下类型的元素 <types> <xsd:schema> <xsd:import namespace="http://ws.poc.mawia/" schemaLocation="http://localhost:777/ws/hello?xsd=1"/> </xsd:schema> </types> ... ... <xs:complexType

我使用JAX-WS创建了一个小型web服务。WSDL文件有如下类型的元素

<types>
  <xsd:schema>
  <xsd:import namespace="http://ws.poc.mawia/" schemaLocation="http://localhost:777/ws/hello?xsd=1"/>
  </xsd:schema>
</types>
...
 ...
    <xs:complexType name="student">
     <xs:sequence>
     <xs:element name="name" type="xs:string" minOccurs="0"/>
     <xs:element name="rollNo" type="xs:int"/>
     </xs:sequence>
    </xs:complexType>
  ...
 ...
我看到的大多数WSDL文件通常在WSDL文件本身中有完整的XSD定义,但JAX-WS将其放置在不同的位置

应该是这样吗?如何配置JAX-WS将所有XSD定义放在一个WSDL文件中

应该是这样吗

将XSD与WSDL分离是JAX-WS中的默认行为,您不必太担心它。最新的WS-Framework(包括WCF)通常能够处理这个问题。根据XSD的大小,导入它可能会使WSDL更具可读性。对于一个小型web服务来说,拥有一个嵌入式模式肯定会更容易,但导入它也不是什么大问题

如何配置JAX-WS将所有XSD定义放在一个WSDL文件中

我不知道有什么直接的方法可以让运行时将模式嵌入到WSDL中,但有一种解决方法可以实现这一点:

  • 发布端点并保存WSDL和XSD
  • 手动将XSD的内容复制到WSDL的
    types
    部分,并在那里替换模式导入
  • 将合并的WSDL文件保存在应用程序可以作为资源访问的位置
  • 让您的web服务加载合并的WSDL。这将停止动态生成,但是,每次更改接口时都必须手动更新WSDL
  • 您可以实现4。通过自定义
    @WebService
    注释。这可能看起来有点像这样:

    @WebService( wsdlLocation = "MyWebService.wsdl")
    public class MyWebService { .... }
    

    你的方法没有任何问题。WSDL使用URL指向另一个WSDL是可以的


    如果不需要,请使用@WebService注释的wsdlLocation属性提及wsdl位置。但同样,使用这种方法,您必须手动修改wsdl。

    MyWebService是一个类或接口?在我这里的设置中,它是一个类
    MyWebService
    仍然实现一个接口(带有
    @WebService
    注释),并使用
    endpointInterface
    属性指向该接口。Aka:
    @WebService(endpointInterface=“some.package.MyPortType”,…)