设为首页 收藏本站
查看: 963|回复: 0

[经验分享] web service CXF工作中使用总结

[复制链接]

尚未签到

发表于 2017-3-2 12:01:52 | 显示全部楼层 |阅读模式
  Apache CXF 是一个开放源代码框架,提供了用于方便地构建和开发 Web 服务的可靠基础架构。它允许创建高性能和可扩展的服务,您可以将这样的服务部署在 Tomcat 和基于 Spring 的轻量级容器中,以及部署在更高级的服务器上,例如 Jboss、IBM® WebSphere® 或 BEA WebLogic。
  依赖的包:             commons-logging-1.1.jar
                            geronimo-activation_1.1_spec-1.0-M1.jar (or Sun's Activation jar)
                            geronimo-annotation_1.0_spec-1.1.jar (JSR 250)
                            geronimo-javamail_1.4_spec-1.0-M1.jar (or Sun's JavaMail jar)
                            geronimo-servlet_2.5_spec-1.1-M1.jar (or Sun's Servlet jar)
                            geronimo-ws-metadata_2.0_spec-1.1.1.jar (JSR 181)
                            jaxb-api-2.1.jar
                            jaxb-impl-2.1.6.jar
                            jaxws-api-2.1.jar
                            jetty-6.1.5.jar
                            jetty-util-6.1.5.jar
                            neethi-2.0.jar
                            saaj-api-1.3.jar
                            saaj-impl-1.3.jar
                            stax-api-1.0.1.jar
                            wsdl4j-1.6.1.jar
                            wstx-asl-3.2.1.jar
                            XmlSchema-1.2.jar
                            xml-resolver-1.2.jar   
  spring jar 包, 用来支持xml配置:
  aopalliance-1.0.jar
                            spring-core-2.0.4.jar
                            spring-beans-2.0.4.jar
                            spring-context-2.0.4.jar
                            spring-web-2.0.4.jar
  CXF jar包:
  cxf-2.1.jar
  以上jar 包 可从apache官方网站下载 apache-cxf-2.1.2.zip, 然后从apache-cxf-2.1.2/lib 目录中获得
  1、首先在web.xml中配置
  <!-- CXF -->
    <servlet>  
          <servlet-name>CXFServlet</servlet-name>  
          <servlet-class>  
              org.apache.cxf.transport.servlet.CXFServlet  
          </servlet-class>  
          <load-on-startup>1</load-on-startup>  
      </servlet>  
      <servlet-mapping>  
          <servlet-name>CXFServlet</servlet-name>  
          <url-pattern>/services/*</url-pattern>  
      </servlet-mapping>  
      <!-- CXF end -->
  2、创建一个spring-module.xml 如下:
  <?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxrs="http://cxf.apache.org/jaxrs"
    xmlns:jaxws="http://cxf.apache.org/jaxws" xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:security="http://www.springframework.org/schema/security"
    xmlns:http-conf = "http://cxf.apache.org/transports/http/configuration"
    xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security-2.0.4.xsd
http://cxf.apache.org/jaxrs
http://cxf.apache.org/schemas/jaxrs.xsd
http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd
http://cxf.apache.org/transports/http/configuration   
http://cxf.apache.org/schemas/configuration/http-conf.xsd">
<http-conf:conduit  name="*.http-conduit">      
    <http-conf:client  ConnectionTimeout="10000"  ReceiveTimeout="20000"/>      
</http-conf:conduit>      
   
    <!-- 系统集成计划反馈信息 -->
    <jaxws:endpoint id="planFeedBackWsService" address="/planFeedBackWsService"
        implementorClass="avicit.bt.webservice.service.PlanFeedBackWsService">
        <jaxws:implementor>
            <bean id="planFeedBackWsServiceImpl"
                class="avicit.bt.webservice.service.impl.PlanFeedBackWsServiceImpl">
            </bean>
        </jaxws:implementor>
    </jaxws:endpoint>
</beans>
  @WebService(targetNamespace = "http://planFeedBackWsService.webservice.bt.avicit/")
public interface PlanFeedBackWsService{
    /**
     * 从系统进行对进展监控信息的更新
     * @param newPassword 新密码
     * @param unitCode 集团编码
     * @return 成功:succeed;失败:error:错误信息。
     */
    public String receiveFeedBack(String feedBackPlan);
    /**
     *
     * @param feedBackPlan
     * @return
     * 在与别的项目集成中发现不能用@WebParam这个注解,否则会报这里要强调,service端不可以用webservice的相关注解,如WebMethod,Webresult,Webparam等注解。否则会出现unexpected element (uri:"", local:"args0").错误
     */
    public String receiveDeliver(String feedBackDeliver);
   
}
  @WebService
public class PlanFeedBackWsServiceImpl extends ServiceBase implements PlanFeedBackWsService {
    @Autowired(required = true)
    private SysUserProcessI sysUserService;
    @Autowired(required = true)
    private SysUserProcessI sysUserProcessI;
    @Autowired(required = true)
    private BtPmTaskInfoService pmTaskInfoService;
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    @Override
    public void delete(BeanBase arg0) throws DaoException {
    }
    @Override
    public void insert(BeanBase arg0) throws DaoException {
    }
    @Override
    public void update(BeanBase arg0) throws DaoException {
    }
    @Override
    public String receiveFeedBack(String feedBackPlan) {
        String returnString = "";
        if (null == feedBackPlan || "".equals(feedBackPlan)) {
            returnString = "反馈信息为空!";
        } else {
            // 解析json字符串
            JSONObject jsonObject = JSONObject.fromObject(feedBackPlan);
            // 得到计划的id
            String ID = (String) jsonObject.get("ID");
            BigDecimal ACTUAL_PROGRESS = null;
            BigDecimal ACTUAL_WORKHOURS = null;
            if (null != ID || !"".equals(ID)) {
                try {
                    // 取出反馈后的信息并进行更新
                    // hibernateDao.update(sysUser);
                    BtPmTaskInfo taskInfo = pmTaskInfoService.getPmTaskInfoById(ID);
                    if (null != taskInfo) {
                        if (taskInfo.getPlanNature() != null && !"".equals(taskInfo.getPlanNature())) {
                            if ("6".equals(taskInfo.getPlanNature())) {
                                // 进展状态
                                if (jsonObject.get("ACTUAL_PROGRESS") != null && !"".equals(jsonObject.get("ACTUAL_PROGRESS"))) {
                                    ACTUAL_PROGRESS = BigDecimal.valueOf(Double.parseDouble(jsonObject.get("ACTUAL_PROGRESS").toString()));
                                }
                                taskInfo.setActualProgress(ACTUAL_PROGRESS);
                                // 实际开始时间
                                if (jsonObject.get("ACTUAL_S_DATE") != null && !"".equals(jsonObject.get("ACTUAL_S_DATE"))
                                        && !"null".equals(jsonObject.get("ACTUAL_S_DATE"))) {
                                    SimpleDateFormat sfEnd = new SimpleDateFormat("yyyy-MM-dd");
                                    SimpleDateFormat sfStart = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy", java.util.Locale.ENGLISH);
                                    Date ACTUAL_S_DATE = null;
                                    String aceDate = sfEnd.format(sfStart.parse(jsonObject.get("ACTUAL_S_DATE").toString()));
                                    ACTUAL_S_DATE = sdf.parse(aceDate);
                                    taskInfo.setActualSDate(ACTUAL_S_DATE);
                                }
                                // 实际完成时间
                                if (jsonObject.get("ACTUAL_E_DATE") != null && !"".equals(jsonObject.get("ACTUAL_E_DATE"))
                                        && !"null".equals(jsonObject.get("ACTUAL_E_DATE"))) {
                                    // 过来的结束日期与开始日期格式不一致所以要进行转换
                                    SimpleDateFormat sfEnd = new SimpleDateFormat("yyyy-MM-dd");
                                    SimpleDateFormat sfStart = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy", java.util.Locale.ENGLISH);
                                    Date ACTUAL_E_DATE = null;
                                    String aceDate = sfEnd.format(sfStart.parse(jsonObject.get("ACTUAL_E_DATE").toString()));
                                    ACTUAL_E_DATE = sdf.parse(aceDate);
                                    taskInfo.setActualEDate(ACTUAL_E_DATE);
                                }
                                // 实际工时
                                if (jsonObject.get("ACTUAL_WORKHOURS") != null && !"".equals(jsonObject.get("ACTUAL_WORKHOURS"))) {
                                    ACTUAL_WORKHOURS = BigDecimal.valueOf(Double.parseDouble(jsonObject.get("ACTUAL_WORKHOURS").toString()));
                                    taskInfo.setActualWorkhours(ACTUAL_WORKHOURS);
                                }
                                // 改变信息并进行更新
                                hibernateDao.update(taskInfo);
                                returnString = "success";
                            }
                        }
                    } else {
                        returnString = "在MPM系统中不存在ID为【" + ID + "】的计划!";
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
        return returnString;
    }
    @Override
    public String receiveDeliver(String feedBackDeliver) {
        String returnString = "";
        if (null == feedBackDeliver || "".equals(feedBackDeliver)) {
            returnString = "交付物信息为空!";
        } else {
            // 解析json字符串
            JSONObject jsonObject = JSONObject.fromObject(feedBackDeliver);
            // 得到交付物的id
            String ID = (String) jsonObject.get("BILL_ID");
            // 得到计划的idTASK_ID
            String TASK_ID = (String) jsonObject.get("TASK_ID");
            String url = "http://198.168.100.2:80/sysware/download/";
            if (null != ID || !"".equals(ID)) {
                try {
                    // 取出反馈后的信息并进行更新
                    BtPmTaskDeliver btPmTaskDeliver = pmTaskInfoService.getPmTaskDeliverById(ID);
                    BtPmTaskInfo taskInfo = pmTaskInfoService.getPmTaskInfoById(TASK_ID);
                    if (btPmTaskDeliver != null) {
                        // 交付物名称
                        if (jsonObject.get("BILL_NAME") != null && !"".equals(jsonObject.get("BILL_NAME"))) {
                            btPmTaskDeliver.setPdmurl(jsonObject.get("BILL_NAME").toString());
                        }
                        if (jsonObject.get("BILL_STATE") != null && !"".equals(jsonObject.get("BILL_STATE"))) {
                            String BILL_STATE = jsonObject.get("BILL_STATE").toString();
                            if ("0".equals(BILL_STATE)) {
                                BILL_STATE = "正常";
                            } else if ("1".equals(BILL_STATE)) {
                                BILL_STATE = "锁定";
                            }
                            btPmTaskDeliver.setDeliverableState(BILL_STATE);
                        }
                        if (jsonObject.get("PDMURL") != null && !"".equals(jsonObject.get("PDMURL"))) {
                            // String
                            // adapterUrl=url+"?ID="+jsonObject.get("PDMURL").toString()+"&&DIS=false&___ifr=true";
                            btPmTaskDeliver.setPdmurl(jsonObject.get("PDMURL").toString());
                        }
                        // 修改人
                        if (jsonObject.get("UPDATER") != null && !"".equals(jsonObject.get("UPDATER"))) {
                            btPmTaskDeliver.setLastUpdatedBy(jsonObject.get("UPDATER").toString());
                        }
                        // 更新计划实际开始时间
                        btPmTaskDeliver.setDeliverActualStartDate(taskInfo.getActualSDate());
                        btPmTaskDeliver.setLastUpdateDate(new Date());
                        // 改变信息并进行更新交付物
                        hibernateDao.update(btPmTaskDeliver);
                        returnString = "更新交付物成功";
                    } else {
                        // 执行新增
                        String BILL_ID = jsonObject.get("BILL_ID").toString();
                        if (null == taskInfo) {
                            returnString = "新增交付物的计划ID=【" + ID + "】在MPM不存在";
                        } else {
                            // 执行新增
                            String BILL_NAME = jsonObject.get("BILL_NAME").toString();
                            String CREATOR = jsonObject.get("CREATOR").toString();
                            String BILL_STATE = jsonObject.get("BILL_STATE").toString();
                            String PDMURL = jsonObject.get("PDMURL").toString();
                            String adapterUrl = "";
                            BtPmTaskDeliver deliver = new BtPmTaskDeliver();
                            if (BILL_ID != null && !"".equals(BILL_ID)) {
                                deliver.setId(BILL_ID);
                            }
                            if (null != BILL_NAME && !"".equals(BILL_NAME)) {
                                deliver.setDeliverableName(BILL_NAME);
                            }
                            if (PDMURL != null && !"".equals(PDMURL)) {
                                // adapterUrl=url+"?ID="+PDMURL+"&&DIS=false&___ifr=true";
                                deliver.setPdmurl(PDMURL);
                            }
                            if (null != CREATOR && !"".equals(CREATOR)) {
                                deliver.setCreatedBy(CREATOR);
                            }
                            if (null != BILL_STATE && !"".equals(BILL_STATE)) {
                                if ("0".equals(BILL_STATE)) {
                                    BILL_STATE = "正常";
                                } else if ("1".equals(BILL_STATE)) {
                                    BILL_STATE = "锁定";
                                }
                                deliver.setDeliverableState(BILL_STATE);
                            }
                            if (null != TASK_ID && !"".equals(TASK_ID)) {
                                deliver.setTaskId(TASK_ID);
                            }
                            // 默认文件类型
                            deliver.setDeliverType("WJ");
                            // 设置实际开始时间
                            deliver.setDeliverActualStartDate(taskInfo.getActualSDate());
                            // 设置计划实际完成时间
                            deliver.setDeliverAcutalEndDate(new Date());
                            PojoUtil.setSysProperties(deliver, OpType.insert);
                            this.hibernateDao.save(deliver);
                            hibernateDao.flush();
                            SysLogUtil.log(deliver, null, OpType.insert, OpResult.success);
                            // hibernateDao.save(deliver);
                            // 保存数据
                            returnString = "新增交付物成功!";
                        }
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
        return returnString;
    }
  
    public static void main(String[] args) throws Exception {
        
        
        //方法一
       /* JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
        String address = "http://127.0.0.1:8080/MPM/services";
        factory.setAddress(address+"/changePasswordWsService");
        factory.setServiceClass(ChangePasswordWsService.class);
        factory.getInInterceptors().add(new LoggingInInterceptor());
        factory.getOutInterceptors().add(new LoggingOutInterceptor());
        ChangePasswordWsService service = (ChangePasswordWsService) factory.create();
        try{
            String xml = service.changePassword("D24D5274BC5787A8CE551BFD7C5CE784", "28101129");
            System.out.println(xml);
        }catch(Exception e){
            e.printStackTrace();
        }*/
        // 方法二动态调用
        String wsdlUrl = "http://127.0.0.1:8080/MPM/services/planFeedBackWsService?wsdl";
        String wsNameSpace = "http://planFeedBackWsService.webservice.bt.avicit/";
        
        JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
        Client client = dcf.createClient(wsdlUrl);
        String json="{'ID':'111'}" ;
        QName name = new QName(wsNameSpace,"receiveFeedBack");
        Object[] xml = null;
        try {
            //xml = client.invoke(name, "D24D5274BC5787A8CE551BFD7C5CE784", "28101129");
            //xml = client.invoke(name, new Object[]{"A","b"});
            xml = client.invoke(name, json);
        
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        System.out.println("xml="+xml[0]);

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-349306-1-1.html 上篇帖子: JFinal开发web项目出现故障小记 下篇帖子: 用Maven构建Mahout项目实现协同过滤userCF--单机版
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表