我正在開發幾個缺陷管理系統之間的幾個集成(作為 Maven 專案),其中一個通過 WSDL 公開服務,迫使我通過 WS 使用它們。對于后者,我成功地為 JDK-8 開發了代碼并且一切正常。
我現在正處于從 8 到 11 的 JDK 遷移程序中,需要更新使用 WS 的集成。我知道在 Java 11 中洗掉了一些 EE 庫(包括 JAX-WS)。然后我上網為了擺脫這個問題,但經過幾天的測驗和依賴的剪切和粘貼我仍然遇到同樣的問題:無法實體化 WS 以與最終服務器互動(即CA SDM 14.1)。
目前我有以下錯誤:
java.lang.NoSuchMethodException: com.sun.xml.bind.v2.model.nav.ReflectionNavigator.getInstance()
我的 POM 檔案如下所示:
<properties>
<target.dir>target</target.dir>
<app.version>4.0.0</app.version>
<skipTests>true</skipTests>
<encoding>UTF-8</encoding>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<project.resources.sourceEncoding>UTF-8</project.resources.sourceEncoding>
<mainClassName>unipol.alm.integrations.FireStarter</mainClassName>
<java.version>11</java.version>
<logback.version>1.2.3</logback.version>
<lombok.version>1.18.20</lombok.version>
<json.version>20210307</json.version>
<apache.http.components.version>4.5.9</apache.http.components.version>
<derby.version>10.14.2.0</derby.version>
<junit.version>4.12</junit.version>
<cucumber.version>1.2.5</cucumber.version>
<octane.cucumber.version>12.60.48</octane.cucumber.version>
<commons.version>2.5</commons.version>
<json.simple.version>1.1.1</json.simple.version>
</properties>
<dependencies>
<!-- Logging dependencies -->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>${logback.version}</version>
</dependency>
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.7</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</dependency>
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>${json.version}</version>
</dependency>
<dependency>
<groupId>com.googlecode.json-simple</groupId>
<artifactId>json-simple</artifactId>
<version>${json.simple.version}</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.8</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-json</artifactId>
<version>1.19.4</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-client</artifactId>
<version>1.19.4</version>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>30.1.1-jre</version>
</dependency>
<dependency>
<groupId>org.codehaus.jettison</groupId>
<artifactId>jettison</artifactId>
<version>1.4.1</version>
</dependency>
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.14.2</version>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.15</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>${apache.http.components.version}</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpmime</artifactId>
<version>${apache.http.components.version}</version>
</dependency>
<dependency>
<groupId>org.apache.derby</groupId>
<artifactId>derby</artifactId>
<version>${derby.version}</version>
</dependency>
<dependency>
<groupId>org.apache.derby</groupId>
<artifactId>derbyclient</artifactId>
<version>${derby.version}</version>
</dependency>
<dependency>
<groupId>javax.xml.rpc</groupId>
<artifactId>javax.xml.rpc-api</artifactId>
<version>1.1.2</version>
</dependency>
<dependency>
<groupId>com.hpe.alm.octane</groupId>
<artifactId>octane-cucumber-jvm</artifactId>
<version>${octane.cucumber.version}</version>
</dependency>
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-junit</artifactId>
<version>${cucumber.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-java</artifactId>
<version>${cucumber.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>${commons.version}</version>
</dependency>
<dependency>
<groupId>org.apache.axis</groupId>
<artifactId>axis</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>commons-discovery</groupId>
<artifactId>commons-discovery</artifactId>
<version>0.4</version>
</dependency>
<dependency>
<groupId>javax.activation</groupId>
<artifactId>activation</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>javax.mail</groupId>
<artifactId>javax.mail-api</artifactId>
<version>1.6.2</version>
</dependency>
<dependency>
<groupId>wsdl4j</groupId>
<artifactId>wsdl4j</artifactId>
<version>1.6.3</version>
</dependency>
<dependency>
<groupId>net.lingala.zip4j</groupId>
<artifactId>zip4j</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>com.hierynomus</groupId>
<artifactId>smbj</artifactId>
<version>0.10.0</version>
</dependency>
<dependency>
<groupId>commons-vfs</groupId>
<artifactId>commons-vfs</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>jcifs</groupId>
<artifactId>jcifs</artifactId>
<version>1.3.17</version>
</dependency>
<dependency>
<groupId>javax.xml.ws</groupId>
<artifactId>jaxws-api</artifactId>
<version>2.3.1</version>
</dependency>
<dependency>
<groupId>javax.jws</groupId>
<artifactId>jsr181-api</artifactId>
<version>1.0-MR1</version>
</dependency>
<dependency>
<groupId>com.sun.xml.ws</groupId>
<artifactId>rt</artifactId>
<version>2.2.10</version>
</dependency>
<dependency>
<groupId>com.sun.org.apache.xml.internal</groupId>
<artifactId>resolver</artifactId>
<version>20050927</version>
</dependency>
<dependency>
<groupId>com.sun.xml.stream.buffer</groupId>
<artifactId>streambuffer</artifactId>
<version>1.5.6</version>
</dependency>
<dependency>
<groupId>com.sun.xml.ws</groupId>
<artifactId>policy</artifactId>
<version>2.3.1</version>
</dependency>
<dependency>
<groupId>com.sun.xml.messaging.saaj</groupId>
<artifactId>saaj-impl</artifactId>
<version>1.5.1</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-core</artifactId>
<version>3.0.2</version>
<exclusions>
<exclusion>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>2.3.1</version>
</dependency>
</dependencies>
javax.xml.ws為使 JAX-WS 在 JDK 11 上作業而添加的所有依賴項(在代碼通過 NoClassDefFoundError 給出的連續例外之后添加)從何而來。
此外,我從缺陷管理系統公開的 WSDL 生成了 Java 類,在我的 POM 中使用以下內容(只是第一次):
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxws-maven-plugin</artifactId>
<version>2.6</version>
<executions>
<execution>
<goals>
<goal>
wsimport
</goal>
</goals>
</execution>
</executions>
<configuration>
<wsdlDirectory>${project.basedir}/src/main/resources/</wsdlDirectory>
<wsdlUrls>
<wsdlUrl>http://defect.management.system/ServiceDefinition?wsdl</wsdlUrl>
</wsdlUrls>
<packageName>com.ca.unicenterserviceplus.servicedesk</packageName>
<sourceDestDir>${project.build.directory}/generated-sources/</sourceDestDir>
</configuration>
</plugin>
然后將生成的檔案復制并粘貼com.ca.unicenterserviceplus.servicedesk到應用程式期望找到的位置。
畢竟我的問題是:有沒有辦法讓事情像使用 JDK 8 一樣作業?
uj5u.com熱心網友回復:
在Java 11的Oracle 發行說明中,我發現了這一點:
other-libs ? JEP 320 洗掉 Java EE 和 CORBA 模塊
從 Java SE 平臺和 JDK 中洗掉 Java EE 和 CORBA 模塊。這些模塊在 Java SE 9 中已被棄用,并宣告打算在未來版本 (JEP 320) 中洗掉它們。
以下模塊已從 Java SE 11 和 JDK 11 中洗掉:
java.xml.ws (JAX-WS, plus the related technologies SAAJ and Web Services Metadata) java.xml.bind (JAXB)
...等等
根據我從 Oracle 讀到的內容,他們從 Java 11 中洗掉了 Jax-WS,但它在 OpenJDK 下仍然可用:JEP 320: Remove the Java EE and CORBA Modules。根據那個頁面,
該提議假設希望在最新 JDK 上編譯或運行應用程式的開發人員可以找到并部署 Java EE 技術的替代版本。JAX-WS 和 JAXB 的參考實作 (RI) 是一個很好的起點,因為它們完全替代了 JDK 9 中的 java.xml.ws 和 java.xml.bind 模塊。 這些 RI 可用作 Maven 工件:(注意它們必須部署在類路徑上)
com.sun.xml.ws : jaxws-ri (JAX-WS, plus SAAJ and Web Services Metadata) com.sun.xml.bind : jaxb-ri (JAXB)JAX-WS 和 JAXB 的工具也可用作 Maven 工件:
wsgen and wsimport: com.sun.xml.ws : jaxws-tools, plus tool scripts schemagen and xjc: com.sun.xml.bind : jaxb-jxc and com.sun.xml.bind : jaxb-xjc, plus tool scripts
由于您使用的是 Java 8,您可能仍需要先進行更多調整和/或遷移到 Java 9,但據我所知,這是您前進的唯一途徑。
總而言之,Oracle 從 Java 11 中洗掉了 Jax-WS 和相關技術,但它們仍然可供下載和使用,這里是JAX-WS 和 JAXB 的(RI)的 Maven 存盤庫的鏈接。詹姆士
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/328768.html
上一篇:Netsuite-RESTAPI-使用基于令牌的身份驗證(TBA)進行查詢-(在Python中)
下一篇:SQL查詢回傳錯誤的結果
