无法使用 java 存根连接 Web 服务输入字符串输出 POJO
unable to connect web service using java stubs input String output POJO
我有一个 Web 服务(称为连接)和另一个 Web 服务(称为客户端)。我正在尝试使用生成的存根通过客户端 WS 调用 Connect WS。存根是使用 wsdl2java maven 插件创建的。
而且我也无法打印错误
通过 SOAPUI 检查相应请求遇到以下错误。
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<soap:Fault>
<faultcode>soap:Server</faultcode>
<faultstring>Exception occurred during execution on the exchange: Exchange[ID-DESKTOP-980NI68-1543911108884-98-1]</faultstring>
</soap:Fault>
这是调用 Web 服务 Connect 的代码片段。
"request"是参数:
InterfaceClassService IFS = new InterfaceClassService();
wsdl.java2.InterfaceClass interfaceClass = IFS.getInterfaceClassPort();
Pojo pojo = interfaceClass.callThirdParty(request);
String response = pojo.getResponse();
return response + " Client_WSDL2Java";
这是我的 POM.XML:
<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>com.mycompany</groupId>
<artifactId>camel-blueprint</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>bundle</packaging>
<name>Camel Blueprint Quickstart</name>
<description>Empty Camel Blueprint Example</description>
<licenses>
<license>
<name>Apache License, Version 2.0</name>
<url>http://www.apache.org/licenses/LICENSE-2.0.html</url>
<distribution>repo</distribution>
</license>
</licenses>
<properties>
<camel.version>2.21.0.fuse-710018-redhat-00001</camel.version>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<version.maven-bundle-plugin>3.2.0</version.maven-bundle-plugin>
<jboss.fuse.bom.version>7.1.0.fuse-710023-redhat-00001</jboss.fuse.bom.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.jboss.fuse</groupId>
<artifactId>jboss-fuse-parent</artifactId>
<version>${jboss.fuse.bom.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-core</artifactId>
</dependency>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-blueprint</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</dependency>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-cxf</artifactId>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http-jetty</artifactId>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxws</artifactId>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</dependency>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-test-blueprint</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<artifactId>org.apache.felix.fileinstall</artifactId>
<groupId>org.apache.felix</groupId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<repositories>
<repository>
<releases>
<enabled>true</enabled>
<updatePolicy>never</updatePolicy>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
<id>fuse-public-repository</id>
<name>FuseSource Community Release Repository</name>
<url>https://repo.fusesource.com/nexus/content/groups/public</url>
</repository>
<repository>
<releases>
<enabled>true</enabled>
<updatePolicy>never</updatePolicy>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
<id>red-hat-ga-repository</id>
<name>Red Hat GA Repository</name>
<url>https://maven.repository.redhat.com/ga</url>
</repository>
<repository>
<releases>
<enabled>true</enabled>
<updatePolicy>never</updatePolicy>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
<id>red-hat-ea-repository</id>
<name>Red Hat EA Repository</name>
<url>https://maven.repository.redhat.com/earlyaccess/all</url>
</repository>
<repository>
<releases>
<enabled>true</enabled>
<updatePolicy>never</updatePolicy>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
<id>jboss-ea-repository</id>
<name>Red Hat JBoss Early Access Repository</name>
<url>http://repository.jboss.org/nexus/content/groups/ea</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<releases>
<enabled>true</enabled>
<updatePolicy>never</updatePolicy>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
<id>fuse-public-repository</id>
<name>FuseSource Community Release Repository</name>
<url>https://repo.fusesource.com/nexus/content/groups/public</url>
</pluginRepository>
<pluginRepository>
<releases>
<enabled>true</enabled>
<updatePolicy>never</updatePolicy>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
<id>red-hat-ga-repository</id>
<name>Red Hat GA Repository</name>
<url>https://maven.repository.redhat.com/ga</url>
</pluginRepository>
<pluginRepository>
<releases>
<enabled>true</enabled>
<updatePolicy>never</updatePolicy>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
<id>red-hat-ea-repository</id>
<name>Red Hat EA Repository</name>
<url>https://maven.repository.redhat.com/earlyaccess/all</url>
</pluginRepository>
<pluginRepository>
<releases>
<enabled>true</enabled>
<updatePolicy>never</updatePolicy>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
<id>jboss-ea-repository</id>
<name>Red Hat JBoss Early Access Repository</name>
<url>http://repository.jboss.org/nexus/content/groups/ea</url>
</pluginRepository>
</pluginRepositories>
<build>
<defaultGoal>install</defaultGoal>
<plugins>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<version>${version.maven-bundle-plugin}</version>
<extensions>true</extensions>
<configuration>
<instructions>
<Bundle-SymbolicName>client_wsdl2java</Bundle-SymbolicName>
<Bundle-Name>Empty Camel Blueprint Example [client_wsdl2java]</Bundle-Name></instructions></configuration>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
<configuration>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.camel</groupId>
<artifactId>camel-maven-plugin</artifactId>
<version>${camel.version}</version>
<configuration>
<useBlueprint>true</useBlueprint>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-codegen-plugin</artifactId>
<executions>
<execution>
<id>generate-sources</id>
<phase>generate-sources</phase>
<goals>
<goal>wsdl2java</goal>
</goals>
<configuration>
<sourceRoot>${project.build.directory}/generated/cxf</sourceRoot>
<wsdlOptions>
<wsdlOption>
<wsdl>${basedir}/src/main/resources/myService.wsdl</wsdl>
</wsdlOption>
</wsdlOptions>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
当我 运行 它作为本地 Camel 上下文时,它工作正常并完成任务,
但是当我在 red hat fuse server 7.0 中部署它时,它给了我一个错误。
捆绑包已正确部署并且也已启动。
这是我从服务器日志中得到的错误:
Failed delivery for (MessageId: ID-DESKTOP-980NI68-1543911108884-98-2 on ExchangeId: ID-DESKTOP-980NI68-1543911108884-98-1). Exhausted after delivery attempt: 1 caught: org.apache.camel.CamelExecutionException: Exception occurred during execution on the exchange: Exchange[ID-DESKTOP-980NI68-1543911108884-98-1] Message History --------------------------------------------------------------------------------------------------------------------------------------- RouteId ProcessorId Processor Elapsed (ms) [_route1 ] [_route1 ] [cxf://bean:client_wsdl2java ] [ 2] [_route1 ] [_log3 ] [log ] [ 2] [_route1 ] [_setBody1 ] [setBody[bean[ref:client_wsdl2java1 method:Client_callThirdParty]] ] [ 0] Stacktrace ---------------------------------------------------------------------------------------------------------------------------------------
如有任何帮助,我们将不胜感激!!
提前致谢。
编辑:蓝图 DSL 中的骆驼路线:
<camelContext
id="camelContext-598b2e86-31b2-4224-8776-9eff5ac2d2254" xmlns="http://camel.apache.org/schema/blueprint">
<route id="_route1">
<from id="_from1" uri="cxf:bean:orderEndpoint"/>
<log id="_log4" message="log 2 ${body}"/>
<setBody id="_setBody1">
<method bean="OrderEndpoint1" method="Reply"/>
</setBody>
<transform id="_transform1">
<simple>${body}</simple>
</transform>
<log id="_log2" message="log 3 ${body}"/>
</route>
<!-- test route -->
<route id="_route2">
<from id="_from2" uri="seda:incomingValue"/>
<log id="_log1" message=" log seda Storing ${body}"/>
</route>
</camelContext>
可能客户端和webservice的Pojo
class版本不同。检查这个,例如使用 JDK.
中的 javap
实用程序
javap -cp [path/to/jarfile] -v [your.package.Pojo]
运行此命令针对包含Pojo
class的Web服务的JAR文件和包含Pojo
[=23]的客户端的JAR文件=].该命令输出了很多东西,你必须找到开头的 class 的校验和。
Classfile path/to/whatever/Pojo.class
Last modified ...
MD5 checksum 99b7c66e2eb1ffe0a1ba39b65de7912d << should be same for both Pojo classes
....
比较客户端和网络服务中 Pojo classes 的校验和。它们应该相同,如果不同,它们的版本不同,这可能是响应无法转换为 Pojo
类型的原因。
我有一个 Web 服务(称为连接)和另一个 Web 服务(称为客户端)。我正在尝试使用生成的存根通过客户端 WS 调用 Connect WS。存根是使用 wsdl2java maven 插件创建的。
而且我也无法打印错误 通过 SOAPUI 检查相应请求遇到以下错误。
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<soap:Fault>
<faultcode>soap:Server</faultcode>
<faultstring>Exception occurred during execution on the exchange: Exchange[ID-DESKTOP-980NI68-1543911108884-98-1]</faultstring>
</soap:Fault>
这是调用 Web 服务 Connect 的代码片段。 "request"是参数:
InterfaceClassService IFS = new InterfaceClassService();
wsdl.java2.InterfaceClass interfaceClass = IFS.getInterfaceClassPort();
Pojo pojo = interfaceClass.callThirdParty(request);
String response = pojo.getResponse();
return response + " Client_WSDL2Java";
这是我的 POM.XML:
<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>com.mycompany</groupId>
<artifactId>camel-blueprint</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>bundle</packaging>
<name>Camel Blueprint Quickstart</name>
<description>Empty Camel Blueprint Example</description>
<licenses>
<license>
<name>Apache License, Version 2.0</name>
<url>http://www.apache.org/licenses/LICENSE-2.0.html</url>
<distribution>repo</distribution>
</license>
</licenses>
<properties>
<camel.version>2.21.0.fuse-710018-redhat-00001</camel.version>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<version.maven-bundle-plugin>3.2.0</version.maven-bundle-plugin>
<jboss.fuse.bom.version>7.1.0.fuse-710023-redhat-00001</jboss.fuse.bom.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.jboss.fuse</groupId>
<artifactId>jboss-fuse-parent</artifactId>
<version>${jboss.fuse.bom.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-core</artifactId>
</dependency>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-blueprint</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</dependency>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-cxf</artifactId>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http-jetty</artifactId>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxws</artifactId>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</dependency>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-test-blueprint</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<artifactId>org.apache.felix.fileinstall</artifactId>
<groupId>org.apache.felix</groupId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<repositories>
<repository>
<releases>
<enabled>true</enabled>
<updatePolicy>never</updatePolicy>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
<id>fuse-public-repository</id>
<name>FuseSource Community Release Repository</name>
<url>https://repo.fusesource.com/nexus/content/groups/public</url>
</repository>
<repository>
<releases>
<enabled>true</enabled>
<updatePolicy>never</updatePolicy>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
<id>red-hat-ga-repository</id>
<name>Red Hat GA Repository</name>
<url>https://maven.repository.redhat.com/ga</url>
</repository>
<repository>
<releases>
<enabled>true</enabled>
<updatePolicy>never</updatePolicy>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
<id>red-hat-ea-repository</id>
<name>Red Hat EA Repository</name>
<url>https://maven.repository.redhat.com/earlyaccess/all</url>
</repository>
<repository>
<releases>
<enabled>true</enabled>
<updatePolicy>never</updatePolicy>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
<id>jboss-ea-repository</id>
<name>Red Hat JBoss Early Access Repository</name>
<url>http://repository.jboss.org/nexus/content/groups/ea</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<releases>
<enabled>true</enabled>
<updatePolicy>never</updatePolicy>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
<id>fuse-public-repository</id>
<name>FuseSource Community Release Repository</name>
<url>https://repo.fusesource.com/nexus/content/groups/public</url>
</pluginRepository>
<pluginRepository>
<releases>
<enabled>true</enabled>
<updatePolicy>never</updatePolicy>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
<id>red-hat-ga-repository</id>
<name>Red Hat GA Repository</name>
<url>https://maven.repository.redhat.com/ga</url>
</pluginRepository>
<pluginRepository>
<releases>
<enabled>true</enabled>
<updatePolicy>never</updatePolicy>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
<id>red-hat-ea-repository</id>
<name>Red Hat EA Repository</name>
<url>https://maven.repository.redhat.com/earlyaccess/all</url>
</pluginRepository>
<pluginRepository>
<releases>
<enabled>true</enabled>
<updatePolicy>never</updatePolicy>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
<id>jboss-ea-repository</id>
<name>Red Hat JBoss Early Access Repository</name>
<url>http://repository.jboss.org/nexus/content/groups/ea</url>
</pluginRepository>
</pluginRepositories>
<build>
<defaultGoal>install</defaultGoal>
<plugins>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<version>${version.maven-bundle-plugin}</version>
<extensions>true</extensions>
<configuration>
<instructions>
<Bundle-SymbolicName>client_wsdl2java</Bundle-SymbolicName>
<Bundle-Name>Empty Camel Blueprint Example [client_wsdl2java]</Bundle-Name></instructions></configuration>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
<configuration>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.camel</groupId>
<artifactId>camel-maven-plugin</artifactId>
<version>${camel.version}</version>
<configuration>
<useBlueprint>true</useBlueprint>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-codegen-plugin</artifactId>
<executions>
<execution>
<id>generate-sources</id>
<phase>generate-sources</phase>
<goals>
<goal>wsdl2java</goal>
</goals>
<configuration>
<sourceRoot>${project.build.directory}/generated/cxf</sourceRoot>
<wsdlOptions>
<wsdlOption>
<wsdl>${basedir}/src/main/resources/myService.wsdl</wsdl>
</wsdlOption>
</wsdlOptions>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
当我 运行 它作为本地 Camel 上下文时,它工作正常并完成任务, 但是当我在 red hat fuse server 7.0 中部署它时,它给了我一个错误。 捆绑包已正确部署并且也已启动。 这是我从服务器日志中得到的错误:
Failed delivery for (MessageId: ID-DESKTOP-980NI68-1543911108884-98-2 on ExchangeId: ID-DESKTOP-980NI68-1543911108884-98-1). Exhausted after delivery attempt: 1 caught: org.apache.camel.CamelExecutionException: Exception occurred during execution on the exchange: Exchange[ID-DESKTOP-980NI68-1543911108884-98-1] Message History --------------------------------------------------------------------------------------------------------------------------------------- RouteId ProcessorId Processor Elapsed (ms) [_route1 ] [_route1 ] [cxf://bean:client_wsdl2java ] [ 2] [_route1 ] [_log3 ] [log ] [ 2] [_route1 ] [_setBody1 ] [setBody[bean[ref:client_wsdl2java1 method:Client_callThirdParty]] ] [ 0] Stacktrace ---------------------------------------------------------------------------------------------------------------------------------------
如有任何帮助,我们将不胜感激!! 提前致谢。
编辑:蓝图 DSL 中的骆驼路线:
<camelContext
id="camelContext-598b2e86-31b2-4224-8776-9eff5ac2d2254" xmlns="http://camel.apache.org/schema/blueprint">
<route id="_route1">
<from id="_from1" uri="cxf:bean:orderEndpoint"/>
<log id="_log4" message="log 2 ${body}"/>
<setBody id="_setBody1">
<method bean="OrderEndpoint1" method="Reply"/>
</setBody>
<transform id="_transform1">
<simple>${body}</simple>
</transform>
<log id="_log2" message="log 3 ${body}"/>
</route>
<!-- test route -->
<route id="_route2">
<from id="_from2" uri="seda:incomingValue"/>
<log id="_log1" message=" log seda Storing ${body}"/>
</route>
</camelContext>
可能客户端和webservice的Pojo
class版本不同。检查这个,例如使用 JDK.
javap
实用程序
javap -cp [path/to/jarfile] -v [your.package.Pojo]
运行此命令针对包含Pojo
class的Web服务的JAR文件和包含Pojo
[=23]的客户端的JAR文件=].该命令输出了很多东西,你必须找到开头的 class 的校验和。
Classfile path/to/whatever/Pojo.class
Last modified ...
MD5 checksum 99b7c66e2eb1ffe0a1ba39b65de7912d << should be same for both Pojo classes
....
比较客户端和网络服务中 Pojo classes 的校验和。它们应该相同,如果不同,它们的版本不同,这可能是响应无法转换为 Pojo
类型的原因。