当前位置:首页 > Java

java webservice如何发布

2026-03-03 13:32:12Java

使用JAX-WS发布WebService

在Java中,JAX-WS是创建和发布WebService的标准API。以下是通过JAX-WS发布WebService的步骤:

创建一个Java类并添加@WebService注解

import javax.jws.WebService;

@WebService
public class HelloService {
    public String sayHello(String name) {
        return "Hello, " + name + "!";
    }
}

使用Endpoint类发布服务

import javax.xml.ws.Endpoint;

public class WebServicePublisher {
    public static void main(String[] args) {
        String address = "http://localhost:8080/hello";
        Endpoint.publish(address, new HelloService());
        System.out.println("WebService published at: " + address);
    }
}

使用Spring Boot发布WebService

Spring Boot简化了WebService的发布过程:

添加依赖到pom.xml

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web-services</artifactId>
</dependency>

创建服务端点

import org.springframework.ws.server.endpoint.annotation.Endpoint;
import org.springframework.ws.server.endpoint.annotation.PayloadRoot;
import org.springframework.ws.server.endpoint.annotation.RequestPayload;
import org.springframework.ws.server.endpoint.annotation.ResponsePayload;

@Endpoint
public class GreetingEndpoint {
    private static final String NAMESPACE_URI = "http://example.com/greeting";

    @PayloadRoot(namespace = NAMESPACE_URI, localPart = "greetingRequest")
    @ResponsePayload
    public GreetingResponse greeting(@RequestPayload GreetingRequest request) {
        GreetingResponse response = new GreetingResponse();
        response.setGreeting("Hello, " + request.getName() + "!");
        return response;
    }
}

配置WebService

import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.ws.config.annotation.EnableWs;
import org.springframework.ws.transport.http.MessageDispatcherServlet;

@EnableWs
@Configuration
public class WebServiceConfig {
    @Bean
    public ServletRegistrationBean<MessageDispatcherServlet> messageDispatcherServlet(ApplicationContext context) {
        MessageDispatcherServlet servlet = new MessageDispatcherServlet();
        servlet.setApplicationContext(context);
        servlet.setTransformWsdlLocations(true);
        return new ServletRegistrationBean<>(servlet, "/ws/*");
    }
}

使用CXF框架发布WebService

Apache CXF是一个功能丰富的WebService框架:

添加CXF依赖

<dependency>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-rt-frontend-jaxws</artifactId>
    <version>3.4.0</version>
</dependency>
<dependency>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-rt-transports-http</artifactId>
    <version>3.4.0</version>
</dependency>

配置和发布服务

import org.apache.cxf.jaxws.JaxWsServerFactoryBean;

public class CxfPublisher {
    public static void main(String[] args) {
        JaxWsServerFactoryBean factory = new JaxWsServerFactoryBean();
        factory.setServiceClass(HelloService.class);
        factory.setAddress("http://localhost:8080/hello");
        factory.create();
        System.out.println("CXF WebService published");
    }
}

生成WSDL文件

对于需要WSDL的场景,可以使用以下方法:

使用wsgen工具生成WSDL

wsgen -cp . -wsdl -r . -d . -s . com.example.HelloService

在Spring WS中自动生成WSDL

@Bean(name = "greeting")
public DefaultWsdl11Definition defaultWsdl11Definition(XsdSchema greetingSchema) {
    DefaultWsdl11Definition wsdl11Definition = new DefaultWsdl11Definition();
    wsdl11Definition.setPortTypeName("GreetingPort");
    wsdl11Definition.setLocationUri("/ws");
    wsdl11Definition.setTargetNamespace("http://example.com/greeting");
    wsdl11Definition.setSchema(greetingSchema);
    return wsdl11Definition;
}

@Bean
public XsdSchema greetingSchema() {
    return new SimpleXsdSchema(new ClassPathResource("greeting.xsd"));
}

测试WebService

使用SOAPUI或Postman测试发布的WebService

通过浏览器访问WSDL

http://localhost:8080/ws/greeting.wsdl

使用Java客户端测试

java webservice如何发布

import javax.xml.namespace.QName;
import javax.xml.ws.Service;
import java.net.URL;

public class WebServiceClient {
    public static void main(String[] args) throws Exception {
        URL wsdlUrl = new URL("http://localhost:8080/hello?wsdl");
        QName serviceName = new QName("http://example.com/", "HelloService");
        Service service = Service.create(wsdlUrl, serviceName);
        HelloService hello = service.getPort(HelloService.class);
        System.out.println(hello.sayHello("World"));
    }
}

标签: javawebservice
分享给朋友:

相关文章

java如何运行

java如何运行

运行Java程序的基本方法 Java程序的运行需要经过编写、编译和执行三个主要阶段。以下是具体步骤: 编写Java源代码 创建一个以.java为后缀的文件,例如HelloWorld.java。文件内…

如何学java

如何学java

学习Java的基础知识 Java是一门面向对象的编程语言,掌握基础语法是入门的关键。需要了解变量、数据类型、运算符、控制结构(如if-else、for循环、while循环)、数组等概念。可以通过官方文…

java如何输入数组

java如何输入数组

输入数组的方法 在Java中,可以通过多种方式输入数组,具体取决于输入源(如控制台、文件等)和数组类型(如基本类型或对象类型)。以下是几种常见的方法: 使用Scanner从控制台输入 对于基本数据类…

java如何创建对象

java如何创建对象

创建对象的基本方法 在Java中,创建对象主要通过new关键字调用构造函数完成。基本语法为: ClassName objectName = new ClassName(); 例如创建String对象…

java中如何获取当前时间

java中如何获取当前时间

获取当前时间的几种方法 使用 java.time 包(Java 8及以上推荐) import java.time.LocalDateTime; LocalDateTime currentTime =…

如何阅读java源码

如何阅读java源码

阅读Java源码的方法 选择合适的源码项目 初学者建议从JDK核心类库(如java.lang、java.util)或知名开源项目(如Spring、Guava)入手。选择文档完善、社区活跃的项目能降低理…