springmvc集成cxf

匿名 (未验证) 提交于 2019-12-03 00:37:01
在springmvc中继承cxf 利用cxf发布webService接口以及调用cxf接口
分两步:
第一步:服务端的发布;

1:配置web.xml文件,添加cxf的servlet

   <servlet>         <servlet-name>cxf</servlet-name>         <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>         <load-on-startup>1</load-on-startup>     </servlet>      <servlet-mapping>         <servlet-name>cxf</servlet-name>         <url-pattern>/webService/*</url-pattern>     </servlet-mapping>
2:maven导入需要的cxf jar包

<properties>   <cxf.version>3.2.1</cxf.version> </properties> <dependency>   <groupId>org.apache.cxf</groupId>   <artifactId>cxf-rt-frontend-jaxws</artifactId>   <version>${cxf.version}</version> </dependency> <dependency>   <groupId>org.apache.cxf</groupId>   <artifactId>cxf-rt-transports-http</artifactId>   <version>${cxf.version}</version> </dependency> <dependency>   <groupId>org.apache.cxf</groupId>   <artifactId>cxf-core</artifactId>   <version>${cxf.version}</version> </dependency>

3.导入wsdljar包

<dependency>    <groupId>soap.public</groupId>    <artifactId>wsdl4j</artifactId>    <version>1.6.3</version>    <scope>system</scope>    <systemPath>${project.basedir}/src/main/webapp/WEB-INF/lib/wsdl4j-1.6.3.jar</systemPath> </dependency>

此处注意wsdljar包的版本号要是1.6的,之前本地有1.5的导致客户端调用时会报错,所以此处要格外注意。

我此处是将

wsdl4j-1.6.3.jar 包放在了工程的lib目录下,然后引用了本地lib中的此jar包,此处也可以直接从maven仓库中引用。




2:在spring配置文件中发布webService接口(这步可以在写好服务端接口后再配置,此处为了将配置文件放一起)

3:建立服务端代码

定义接口文件HelloWorld.java

@WebService @SOAPBinding(style = SOAPBinding.Style.RPC) public interface HelloWorld {          public String uploadICDFile(@WebParam(name = "key")String key,                                 @WebParam(name = "id")String id,                                 @WebParam(name = "type")Integer type); }

定义接口实现类HelloWorldImpl.java

import net.sf.json.JSONObject; import org.dom4j.Document; import org.dom4j.DocumentHelper; import org.slf4j.LoggerFactory;  import javax.jws.WebService; import javax.jws.soap.SOAPBinding;  @WebService(         endpointInterface = "com.xacf.syzy.shiYanzypz.web.controller.HelloWorld",         targetNamespace = "http://controller.web.shiYanzypz.syzy.xacf.com/",         serviceName = "HelloWorld") @SOAPBinding(style = SOAPBinding.Style.RPC) public class HelloWorldImpl implements HelloWorld{     org.slf4j.Logger logger = LoggerFactory.getLogger(HelloWorldImpl.class);     @Override     public String uploadICDFile(String key, String id, Integer type) {          JSONObject result = new JSONObject();         logger.info("进入上传文件接口uploadICDFile,其中整形值yyj="+ICDType);         JSONObject resultInfo = new JSONObject();                           resultInfo.put("state", "true");         resultInfo.put("message", "验证成功");         resultInfo.put("errorCode", "0");                           result.put("resultInfo", resultInfo);         System.out.println(key + "................." + result.toString());         return result.toString();     } }

到此服务端已建立完成,访问地址:http://127.0.0.1:8081/工程名/webService/helloWorld?wsdl即可看到发布的webService接口内容。

第二步:客户端调用:

客户端调用方法:

/**      * 调用webservice 服务端,上传ICD文件      * @param wsdUrl webservice 服务地址 例如:http://127.0.0.1:8081/工程名/webService/helloWorld?wsdl      * @param namespace 域名 例如:http://controller.web.webservice.cficd.xacf.com/      * @param methodName 方法名 webService 方法名      * @param obj 参数对象数组 按照方法中的参数顺序依次传入,且必须与参数的类型一致      * @return 返回接口调用结果信息      * @throws Exception      */     public static String callWebServiceByJaxWs(String wsdUrl,                                        String namespace, String methodName,Object[] obj) throws Exception{         String result = "";          JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();         org.apache.cxf.endpoint.Client client = dcf.createClient(wsdUrl);//wsdUrl为调用webService的wsdl地址         QName name = new QName(namespace, methodName); //namespace是命名空间,methodName是方法名         try {             Object[] ss = client.invoke(name, obj);             System.out.println(ss[0]);         } catch (Exception e) {             e.printStackTrace();         }         return result;     }

业务action中调用上面封装好的方法即可,注意参数类型要对应,否则会报异常:调用例子如下:

String ="http://127.0.0.1:8082/工程名/webService/helloWorld?wsdl"; String webSoap = "http://controller.web.shiYanzypz.syzy.xacf.com/"; Object[] paramValue = new Object[]{"qe","ssf",1}; String result= WebServiceUtil.callWebServiceByJaxWs(webUrl,webSoap,"uploadICDFile",paramValue);




转载请标明出处:springmvc集成cxf
文章来源: springmvc集成cxf
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!