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:

最终的项目代码和结构:

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐