当前位置:首页 > 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

java 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的场景,可以使用以下方法:

java webservice如何发布

使用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客户端测试

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程序的基本步骤 安装JDK(Java Development Kit)并配置环境变量。确保javac和java命令可在命令行中运行。JDK是编译和运行Java程序的必备工具。 创建Ja…

java程序如何运行

java程序如何运行

编写Java代码 使用文本编辑器或IDE(如IntelliJ IDEA、Eclipse)编写Java源代码,保存为.java文件。例如: public class HelloWorld {…

如何配置java环境

如何配置java环境

下载JDK安装包 访问Oracle官网或OpenJDK官网,选择适合操作系统的JDK版本(如Windows、macOS或Linux)。下载完成后,运行安装程序并按照提示完成安装。 设置环境变量 右键…

如何安装java环境

如何安装java环境

下载JDK安装包 访问Oracle官方网站或OpenJDK项目页面,选择适合操作系统的JDK版本(如Windows、macOS或Linux)。确保下载与系统架构匹配的版本(32位或64位)。 运行…

java如何输入字符串

java如何输入字符串

使用 Scanner 类 在 Java 中,可以通过 java.util.Scanner 类来输入字符串。以下是一个示例代码: import java.util.Scanner; public c…

java如何创建包

java如何创建包

创建Java包的步骤 在Java中,包(package)用于组织和管理类文件,避免命名冲突。以下是创建Java包的详细方法: 定义包名 在Java源文件的开头使用package关键字声明包名。包名…