IDEA中调用SOAP 2025最新版
本文介绍了在JetBrains IDE中使用Maven创建JAX-WS/SOAP客户端的具体步骤:1.新建Maven项目选择Quickstart脚手架,配置OpenJDK17;2.安装Jakarta EE: Web Services插件;3.修改POM文件添加JAX-WS依赖和插件配置,包括在线/离线两种WSDL调用方式;4.运行Maven生成代码后创建测试类调用服务。针对常见网络问题提供了替代W
JetBrains 在新版里把 JAX-WS / SOAP Client 生成器相关功能从 IDE 界面移除了(只保留了对 JAX-RS、REST 的支持)
新建项目:
1.选择Maven脚手架
2.命名别带中文
3.下载并选择OpenJDK17,别的17也一样。
4.脚手架选择Quickstart,这是最常用的。
你可以检视下方生成的Advanced Setiting,里面是默认生成的
安装插件:
在设置中查找并安装此插件:
Jakarta EE: Web Services (JAX-WS)
编辑POM:
仔细查看代码注释去修改,建议从
<properties>
复制粘贴
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!--这是你的项目id,按需修改-->
<groupId>com.example</groupId>
<artifactId>soap-client-demo</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>soap-client-demo</name>
<url>http://maven.apache.org</url>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<!-- JAX-WS API -->
<dependency>
<groupId>jakarta.xml.ws</groupId>
<artifactId>jakarta.xml.ws-api</artifactId>
<version>3.0.1</version>
</dependency>
<!-- JAX-WS Reference Implementation -->
<dependency>
<groupId>com.sun.xml.ws</groupId>
<artifactId>jaxws-rt</artifactId>
<version>3.0.1</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>com.sun.xml.ws</groupId>
<artifactId>jaxws-maven-plugin</artifactId>
<version>4.0.3</version>
<executions>
<execution>
<goals>
<goal>wsimport</goal>
</goals>
</execution>
</executions>
<configuration>
<wsdlUrls>
<wsdlUrl>http://www.dneonline.com/calculator.asmx?wsdl</wsdlUrl>
</wsdlUrls>
<packageName>com.example.soap.generated</packageName>
<sourceDestDir>${project.build.directory}/generated-sources/wsimport</sourceDestDir>
</configuration>
</plugin>
<plugin>
<groupId>com.sun.xml.ws</groupId>
<artifactId>jaxws-maven-plugin</artifactId>
<version>4.0.3</version>
<executions>
<execution>
<goals>
<goal>wsimport</goal>
</goals>
</execution>
</executions>
<configuration>
<wsdlUrls>
<!--因为网络不稳定,所以在这里使用的是本地下载好的WSDL,可以先试试在线调用,报错再去离线使用-->
<!--http://www.dneonline.com/calculator.asmx?wsdl-->
<wsdlUrl>calculator.wsdl</wsdlUrl>
</wsdlUrls>
<packageName>com.example.soap.generated</packageName>
<sourceDestDir>${project.build.directory}/generated-sources/wsimport</sourceDestDir>
</configuration>
</plugin>
</plugins>
</build>
</project>
Maven:
运行Maven,可以点击这个循环标志的m,也可以快捷键,
或者点击右侧工具栏的m,再点击Sync(循环标志)
Sync后点击后,打开Maven的生命周期Lifecycle,先运行clean(双击运行),再运行compile。
这个时候就会出现有错误和没错误的版本:
如果你的Maven报错(没报错直接下一步):
如果你想在线下载:
这个计算器的测试wsdl极其不稳定,可以换成:
https://www.dataaccess.com/webservicesserver/NumberConversion.wso?WSDL
这个应该可以用,调用:将数字转换为英文单词(如 123 → "one hundred twenty three")
如果你想离线(针对于出现如下错误,而且硬要去用这个wsdl的方案):
[ERROR] Failed to execute goal com.sun.xml.ws:jaxws-maven-plugin:4.0.3:wsimport (default) on project test9182: Mojo failed - check output -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException
打开你出错的链接,比如http://www.dneonline.com/calculator.asmx?wsdl,
如果打不开说明停止服务了或者就是网络问题,如果能打开:
Ctrl+S保存到你项目的根目录,和POM同级,并且修改URL为calculator.wsdl(放哪都行,能链接到就行)
运行成功:
根据pom中的规则,你会看到如下文件夹:
Maven生成:
点击这个文件夹有蓝色符号的按钮
你会得到如下的项目结构:
这里就已经成功引用了。
编写测试类:
在如下的文件夹新建Package:
在刚刚新建的Package中新建类:
得到空的类,在类引入你想调用的服务C和接口I:
在这里引用的是
import com.example.soap.generated.NumberConversion;
import com.example.soap.generated.NumberConversionSoapType;
然后新建main
public class Test1 {
public static void main(String[] args) {
}
}
先创建对象:
public class Test1 {
public static void main(String[] args) {
NumberConversion service = new NumberConversion();
}
}
阅读你调用类的代码,可以得到引用方式
@WebEndpoint(name = "NumberConversionSoap")
public NumberConversionSoapType getNumberConversionSoap() {
return super.getPort(new QName("http://www.dataaccess.com/webservicesserver/", "NumberConversionSoap"), NumberConversionSoapType.class);
}
创建引用:
package com.example.soap.client;
import com.example.soap.generated.NumberConversion;
import com.example.soap.generated.NumberConversionSoapType;
public class Test1 {
public static void main(String[] args) {
NumberConversion service = new NumberConversion();
NumberConversionSoapType port = service.getNumberConversionSoap();
}
}
创建测试:
package com.example.soap.client;
import com.example.soap.generated.NumberConversion;
import com.example.soap.generated.NumberConversionSoapType;
import java.math.BigInteger;
import java.math.BigDecimal;
public class Test1 {
public static void main(String[] args) {
NumberConversion service = new NumberConversion();
NumberConversionSoapType port = service.getNumberConversionSoap();
String Words = port.numberToWords(BigInteger.valueOf(3319));
System.out.println(Words);
String Dollar = port.numberToDollars(BigDecimal.valueOf(123));
System.out.println(Dollar);
}
}
运行得到结果:
调用成功
关于JAVA运行的问题,注意你的项目结构是否为17
maven默认配置如下:
注意runner以及import的jre都是使用项目的JDK:
最终的项目代码和结构:
更多推荐
所有评论(0)