org.springeframework.ws.soap.client.SoapFaultClientException 在 jBoss 7.1.1
org.springeframework.ws.soap.client.SoapFaultClientException in jBoss 7.1.1
我正在创建一个 Spring 网络应用程序(实际上是 Liferay 的一个 portlet),我必须在其中与网络服务通信。我们的网络应用程序 运行s JBoss 7.1.1。我以前没有遇到太多麻烦,唯一的区别是当时应用程序 运行 在 Tomcat 服务器上。
我用 soap 插件测试了网络服务,我可以得出结论,网络服务 运行 正常。
我做了什么:
我使用 maven-jaxb2-plugin 从提供的 .wsdl 文件创建了 pojo 文件(DTO?)。那些 类 生成得很好。然后我定义了我的编组 bean:
@Configuration
public class WebServiceConfiguration {
@Bean
public Jaxb2Marshaller persoonServiceMarshaller() {
Jaxb2Marshaller m = new Jaxb2Marshaller();
m.setMtomEnabled(true);
m.setContextPath("services");
return m;
}
@Bean
public WebServiceTemplate persoonTemplate(Jaxb2Marshaller persoonServiceMarshaller) {
WebServiceTemplate w = new WebServiceTemplate();
w.setMarshaller(persoonServiceMarshaller);
w.setUnmarshaller(persoonServiceMarshaller);
w.setDefaultUri("my hardcoded webservice location URI...");
return w;
}
然后我写了一个方法来测试这个东西:
@Autowired
WebServiceTemplate persoonTemplate;
public int getPersonCount(String lastName, String firstName, int birthYear,
int birthMonth, String postalCode) {
System.out.println("Getting PersonCount");
ZoekPersonen zp = new ObjectFactory().createZoekPersonen();
PersoonZoekCriteria criteria = new ObjectFactory()
.createPersoonZoekCriteria();
if (lastName != null && !lastName.equals("")) {
criteria.setNaam(new ObjectFactory().createPersoonDTONaam(lastName));
}
if (firstName != null && !firstName.equals("")) {
criteria.setVoornaam(new ObjectFactory()
.createPersoonDTONaam(firstName));
}
if (birthYear != 0) {
criteria.setGeboorteJaar(new ObjectFactory()
.createPersoonZoekCriteriaGeboorteJaar(birthYear));
}
if(birthYear != 0) {
criteria.setGeboorteMaand(new ObjectFactory()
.createPersoonZoekCriteriaGeboorteMaand(birthMonth));
}
if(postalCode != null && !postalCode.equals("")) {
criteria.setPostCode(new ObjectFactory()
.createPersoonZoekCriteriaPostCode(postalCode));
}
@SuppressWarnings("unchecked")
JAXBElement<ZoekPersonenResponse> jaxBResponse = (JAXBElement<ZoekPersonenResponse>) persoonTemplate
.marshalSendAndReceive(new ObjectFactory()
.createZoekPersonen(zp));
return jaxBResponse.getValue().getReturn().getGevondenPersonen()
.getValue().getPersoonDTO().size();
}
当我测试这个方法时,抛出这个异常:
13:12:54,278 INFO [stdout] (http--0.0.0.0-443-6) 13:12:54,275 ERROR [http--0.0.0.0-443-6][render_portlet_jsp:132] null
13:12:54,279 INFO [stdout] (http--0.0.0.0-443-6) org.springframework.ws.soap.client.SoapFaultClientException: Fault occurred while processing.
13:12:54,281 INFO [stdout] (http--0.0.0.0-443-6) at BLL.PersoonBLL.getPersonCount(PersoonBLL.java:53)
13:12:54,283 INFO [stdout] (http--0.0.0.0-443-6) at controllers.MyController.renderView(MyController.java:44)
13:12:54,284 INFO [stdout] (http--0.0.0.0-443-6) at javax.portlet.GenericPortlet.render(GenericPortlet.java:233)
13:12:54,285 INFO [stdout] (http--0.0.0.0-443-6) at com.liferay.portlet.FilterChainImpl.doFilter(FilterChainImpl.java:103)
13:12:54,286 INFO [stdout] (http--0.0.0.0-443-6) at com.liferay.portlet.ScriptDataPortletFilter.doFilter(ScriptDataPortletFilter.java:55)
13:12:54,290 INFO [stdout] (http--0.0.0.0-443-6) at com.liferay.portlet.FilterChainImpl.doFilter(FilterChainImpl.java:100)
13:12:54,294 INFO [stdout] (http--0.0.0.0-443-6) at com.liferay.portal.kernel.portlet.PortletFilterUtil.doFilter(PortletFilterUtil.java:64)
一头雾水,我觉得跟JBoss有点关系,google了一下,没找到有用的信息。
仅供参考:我的 Maven POM 中的依赖项和插件:
<plugin>
<groupId>org.jvnet.jaxb2.maven2</groupId>
<artifactId>maven-jaxb2-plugin</artifactId>
<configuration>
<schemaDirectory>src\main\resources</schemaDirectory>
<schemaIncludes>
<include>PersoonWebService.wsdl</include>
</schemaIncludes>
<generatePackage>services</generatePackage>
<generateDirectory>src\main\java</generateDirectory>
<verbose>true</verbose>
</configuration>
<executions>
<execution>
<phase>generate-resources</phase>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
</plugin>
<dependency>
<groupId>org.springframework.ws</groupId>
<artifactId>spring-ws-core</artifactId>
<version>${spring-ws.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-oxm</artifactId>
<version>${spring.suite.version}</version>
</dependency>
Spring WS 版本 = 2.1.4-RELEASE
Spring 套件版本 = 3.2.4-RELEASE
升级 spring 版本或 JBoss 版本很遗憾没有选择。这必须 运行 在现有的生产环境中。
非常欢迎提示和技巧!
我自己修复了这个问题:
SoapFaultClientException:WebService 抛出异常!我的请求缺少一些必须的参数。尽管 wsdl 没有按要求提及它们。
==> 问题并不 JBoss 具体,这是我最初的想法。 (抱歉让你蒙羞 Jboss,但我还是不喜欢你 ;-))。
我正在创建一个 Spring 网络应用程序(实际上是 Liferay 的一个 portlet),我必须在其中与网络服务通信。我们的网络应用程序 运行s JBoss 7.1.1。我以前没有遇到太多麻烦,唯一的区别是当时应用程序 运行 在 Tomcat 服务器上。
我用 soap 插件测试了网络服务,我可以得出结论,网络服务 运行 正常。
我做了什么:
我使用 maven-jaxb2-plugin 从提供的 .wsdl 文件创建了 pojo 文件(DTO?)。那些 类 生成得很好。然后我定义了我的编组 bean:
@Configuration
public class WebServiceConfiguration {
@Bean
public Jaxb2Marshaller persoonServiceMarshaller() {
Jaxb2Marshaller m = new Jaxb2Marshaller();
m.setMtomEnabled(true);
m.setContextPath("services");
return m;
}
@Bean
public WebServiceTemplate persoonTemplate(Jaxb2Marshaller persoonServiceMarshaller) {
WebServiceTemplate w = new WebServiceTemplate();
w.setMarshaller(persoonServiceMarshaller);
w.setUnmarshaller(persoonServiceMarshaller);
w.setDefaultUri("my hardcoded webservice location URI...");
return w;
}
然后我写了一个方法来测试这个东西:
@Autowired
WebServiceTemplate persoonTemplate;
public int getPersonCount(String lastName, String firstName, int birthYear,
int birthMonth, String postalCode) {
System.out.println("Getting PersonCount");
ZoekPersonen zp = new ObjectFactory().createZoekPersonen();
PersoonZoekCriteria criteria = new ObjectFactory()
.createPersoonZoekCriteria();
if (lastName != null && !lastName.equals("")) {
criteria.setNaam(new ObjectFactory().createPersoonDTONaam(lastName));
}
if (firstName != null && !firstName.equals("")) {
criteria.setVoornaam(new ObjectFactory()
.createPersoonDTONaam(firstName));
}
if (birthYear != 0) {
criteria.setGeboorteJaar(new ObjectFactory()
.createPersoonZoekCriteriaGeboorteJaar(birthYear));
}
if(birthYear != 0) {
criteria.setGeboorteMaand(new ObjectFactory()
.createPersoonZoekCriteriaGeboorteMaand(birthMonth));
}
if(postalCode != null && !postalCode.equals("")) {
criteria.setPostCode(new ObjectFactory()
.createPersoonZoekCriteriaPostCode(postalCode));
}
@SuppressWarnings("unchecked")
JAXBElement<ZoekPersonenResponse> jaxBResponse = (JAXBElement<ZoekPersonenResponse>) persoonTemplate
.marshalSendAndReceive(new ObjectFactory()
.createZoekPersonen(zp));
return jaxBResponse.getValue().getReturn().getGevondenPersonen()
.getValue().getPersoonDTO().size();
}
当我测试这个方法时,抛出这个异常:
13:12:54,278 INFO [stdout] (http--0.0.0.0-443-6) 13:12:54,275 ERROR [http--0.0.0.0-443-6][render_portlet_jsp:132] null
13:12:54,279 INFO [stdout] (http--0.0.0.0-443-6) org.springframework.ws.soap.client.SoapFaultClientException: Fault occurred while processing.
13:12:54,281 INFO [stdout] (http--0.0.0.0-443-6) at BLL.PersoonBLL.getPersonCount(PersoonBLL.java:53)
13:12:54,283 INFO [stdout] (http--0.0.0.0-443-6) at controllers.MyController.renderView(MyController.java:44)
13:12:54,284 INFO [stdout] (http--0.0.0.0-443-6) at javax.portlet.GenericPortlet.render(GenericPortlet.java:233)
13:12:54,285 INFO [stdout] (http--0.0.0.0-443-6) at com.liferay.portlet.FilterChainImpl.doFilter(FilterChainImpl.java:103)
13:12:54,286 INFO [stdout] (http--0.0.0.0-443-6) at com.liferay.portlet.ScriptDataPortletFilter.doFilter(ScriptDataPortletFilter.java:55)
13:12:54,290 INFO [stdout] (http--0.0.0.0-443-6) at com.liferay.portlet.FilterChainImpl.doFilter(FilterChainImpl.java:100)
13:12:54,294 INFO [stdout] (http--0.0.0.0-443-6) at com.liferay.portal.kernel.portlet.PortletFilterUtil.doFilter(PortletFilterUtil.java:64)
一头雾水,我觉得跟JBoss有点关系,google了一下,没找到有用的信息。
仅供参考:我的 Maven POM 中的依赖项和插件:
<plugin>
<groupId>org.jvnet.jaxb2.maven2</groupId>
<artifactId>maven-jaxb2-plugin</artifactId>
<configuration>
<schemaDirectory>src\main\resources</schemaDirectory>
<schemaIncludes>
<include>PersoonWebService.wsdl</include>
</schemaIncludes>
<generatePackage>services</generatePackage>
<generateDirectory>src\main\java</generateDirectory>
<verbose>true</verbose>
</configuration>
<executions>
<execution>
<phase>generate-resources</phase>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
</plugin>
<dependency>
<groupId>org.springframework.ws</groupId>
<artifactId>spring-ws-core</artifactId>
<version>${spring-ws.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-oxm</artifactId>
<version>${spring.suite.version}</version>
</dependency>
Spring WS 版本 = 2.1.4-RELEASE Spring 套件版本 = 3.2.4-RELEASE
升级 spring 版本或 JBoss 版本很遗憾没有选择。这必须 运行 在现有的生产环境中。
非常欢迎提示和技巧!
我自己修复了这个问题:
SoapFaultClientException:WebService 抛出异常!我的请求缺少一些必须的参数。尽管 wsdl 没有按要求提及它们。
==> 问题并不 JBoss 具体,这是我最初的想法。 (抱歉让你蒙羞 Jboss,但我还是不喜欢你 ;-))。