java如何发布webservice
使用JAX-WS发布WebService
JAX-WS是Java EE的标准API,用于创建和发布SOAP-based Web服务。以下步骤展示如何通过JAX-WS发布WebService:
-
定义服务接口
使用@WebService注解标记接口或类:@WebService public interface HelloWorld { String sayHello(String name); } -
实现服务类
实现接口并添加@WebService注解:@WebService(endpointInterface = "com.example.HelloWorld") public class HelloWorldImpl implements HelloWorld { public String sayHello(String name) { return "Hello, " + name; } } -
发布服务
使用Endpoint类发布服务:public class Publisher { public static void main(String[] args) { String url = "http://localhost:8080/hello"; Endpoint.publish(url, new HelloWorldImpl()); System.out.println("Service published at: " + url); } }
使用Spring Boot发布WebService
Spring Boot整合CXF或Spring Web Services简化发布流程:
-
添加依赖
在pom.xml中添加Spring Web Services依赖:<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web-services</artifactId> </dependency> -
定义服务端点
创建服务类并使用@Endpoint注解:@Endpoint public class HelloWorldEndpoint { private static final String NAMESPACE = "http://example.com/ws"; @PayloadRoot(namespace = NAMESPACE, localPart = "sayHelloRequest") @ResponsePayload public String sayHello(@RequestPayload String name) { return "Hello, " + name; } } -
配置WSDL生成
创建配置类定义Wsdl11Definition:@Configuration @EnableWs public class WebServiceConfig extends WsConfigurerAdapter { @Bean public ServletRegistrationBean<MessageDispatcherServlet> messageDispatcherServlet(ApplicationContext context) { MessageDispatcherServlet servlet = new MessageDispatcherServlet(); servlet.setApplicationContext(context); servlet.setTransformWsdlLocations(true); return new ServletRegistrationBean<>(servlet, "/ws/*"); } @Bean(name = "helloWorld") public Wsdl11Definition defaultWsdl11Definition() { SimpleWsdl11Definition wsdl11Definition = new SimpleWsdl11Definition(); wsdl11Definition.setWsdl(new ClassPathResource("wsdl/helloWorld.wsdl")); return wsdl11Definition; } }
使用Apache CXF发布WebService
CXF是流行的开源框架,支持JAX-WS和JAX-RS:
-
添加CXF依赖
在pom.xml中配置:<dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-frontend-jaxws</artifactId> <version>3.4.0</version> </dependency> -
配置CXF Servlet
在web.xml中注册CXF Servlet:<servlet> <servlet-name>CXFServlet</servlet-name> <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>CXFServlet</servlet-name> <url-pattern>/services/*</url-pattern> </servlet-mapping> -
发布服务
通过Spring配置发布服务:@Configuration public class CxfConfig { @Bean public Server jaxWsServer(HelloWorld helloWorld) { JaxWsServerFactoryBean factory = new JaxWsServerFactoryBean(); factory.setServiceClass(HelloWorld.class); factory.setAddress("/helloWorld"); factory.setServiceBean(helloWorld); return factory.create(); } }
验证WebService
-
访问WSDL
服务发布后,通过URL查看WSDL文件(如http://localhost:8080/ws/helloWorld?wsdl)。 -
使用SOAPUI测试
导入WSDL到SOAPUI工具,生成请求模板并发送测试请求。 -
日志检查
确保服务端日志无错误,并正确接收和响应请求。
注意事项
-
注解配置
JAX-WS的@WebService注解必须完整定义endpointInterface(如使用接口)。 -
端口冲突
确保发布服务的端口未被占用(如8080、8443)。 -
依赖冲突
Spring Boot与CXF版本需兼容,避免依赖冲突导致启动失败。







