pom.xml中添加引用
我这边是因为与项目中的其他包冲突了,所以移除了一部分
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-bundle</artifactId>
<version>2.7.18</version>
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-asm</artifactId>
</exclusion>
<!--<exclusion>
<groupId>org.apache.geronimo.specs</groupId>
<artifactId>geronimo-servlet_3.0_spec</artifactId>
</exclusion>-->
</exclusions>
</dependency>
引用
import org.apache.cxf.interceptor.LoggingInInterceptor;
import org.apache.cxf.interceptor.LoggingOutInterceptor;
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
方法如下:
JaxWsProxyFactoryBean factoryBean = new JaxWsProxyFactoryBean();
factoryBean.getInInterceptors().add(new LoggingInInterceptor());
factoryBean.getOutInterceptors().add(new LoggingOutInterceptor());
factoryBean.setServiceClass(ScribeWeixinServiceImpl.class);
//这里是自定义了一个SOAP请求头,继承自AbstractSoapInterceptor
RequesterHeader out = new RequesterHeader(user, password);
factoryBean.getOutInterceptors().add(out);
//这里是WebService的地址
factoryBean.setAddress(webServiceUrl);
ScribeWeixinServiceImpl impl = (ScribeWeixinServiceImpl) factoryBean.create();
//这里是直接调用方法即可
Integer wsResultXml = impl.sendMassMessage(massMessageList);
这里遇到了几个问题
1、请求时走到此处抛出异常,提示 认证错误。原因是没有加SOAP 请求头,当前请求方法已添加,具体的SOAP请求需要自己实现。
ScribeWeixinServiceImpl impl = (ScribeWeixinServiceImpl) factoryBean.create();
2、提示
XmlSchema异常之is java.lang.NoSuchMethodError: org.apache.ws.commons.schema.XmlSchemaColl
这里百度到的是因为jar包冲突了,pom.xml中添加如下引用即可解决
<dependency>
<groupId>org.apache.ws.commons.schema</groupId>
<artifactId>XmlSchema</artifactId>
<version>1.4.2</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.ws.xmlschema</groupId>
<artifactId>xmlschema</artifactId>
<version>2.2.3</version>
<type>pom</type>
</dependency>
<dependency>
<groupId>org.apache.ws.xmlschema</groupId>
<artifactId>xmlschema-core</artifactId>
<version>2.2.3</version>
</dependency>
3、提示
两个类具有相同的 XML 类型名称 “{http://webService.com/}sendMassMessage”。请使用 @XmlType.name 和 @XmlType.namespace 为类分配不同的名称。
这个百度到的如下解决,在提示的两个java文件中加一行代码
, namespace = "http://namespace.thats.not.the.same.as.the.generated"
参考链接:
1、两个类具有相同的 XML 类型名称
https://www.cnblogs.com/charlottepl/p/12613358.html
2、XmlSchema异常之is java.lang.NoSuchMethodError
https://blog.csdn.net/qq_25623257/article/details/90401140?spm=1001.2014.3001.5506