如果您正在基于 POJO 类创建 Web 服务,那么您只需将您的 war 文件打包到一个 ear 文件中,并在 application.xml 配置文件中定义 Web 模块的上下文根。
这是一个 application.xml 文件示例:
<?xml version="1.0" encoding="UTF-8"?>
<application xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_5.xsd" version="5">
<display-name>simple-ws-app</display-name>
<module>
<web>
<web-uri>simple-ws-war.war</web-uri>
<context-root>/simple-ws-app</context-root>
</web>
</module>
<library-directory>lib</library-directory>
</application>
在注解@WebService 中你可以配置期望的web 服务配置,如果你有一个wsdl 文件那么定义web 服务就更容易了。这里是一个完整的@WebService注解配置示例,只使用你需要的属性。
@WebService(name = "SimpleService",
serviceName = "SimpleService",
portName = "SimpleServicePort",
endpointInterface = "simple.ws.srv.SimpleServicePortType",
targetNamespace = "http://www.ws.simple/srv",
wsdlLocation = "WEB-INF/wsdl/simple-ws.wsdl"
)
请注意,如果您使用的是 wsdl 文件,则默认放置它的位置是 WEB-INF/wsdl。
现在,此配置的预期 wsdl URL 是
http://hostname:port/simple-ws-app/SimpleService?wsdl
这可能不适用于所有应用服务器,我知道它适用于 Glassfish、WildFly 和 Weblogic。
最后,企业 Web 服务的默认命名(例如 EJB WebServices、ear 文件中的 ejb-jar)实际上是依赖于应用服务器的。几个月来,我一直在谷歌搜索并尝试完成此配置,结果相同。无论您是否提供完整的 @WebService 注释配置,包括具有预期端点配置的有效 wsdl,app-servers 都会覆盖 wsdl 端点 URL。