20156 月11
Nutz:集成 CXF Webservice [通过cxf-servlet.xml配置文件]
pom.xml
<!--CXF START--> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-api</artifactId> <version>2.7.15</version> </dependency> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-frontend-jaxws</artifactId> <version>2.7.15</version> </dependency> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-bindings-soap</artifactId> <version>2.7.15</version> </dependency> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-transports-http</artifactId> <version>2.7.15</version> </dependency> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-ws-security</artifactId> <version>2.7.15</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>4.1.5.RELEASE</version> </dependency> <!--CXF END-->
web.xml
<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>/webservice/*</url-pattern> </servlet-mapping>
cxf-servlet.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:jaxws="http://cxf.apache.org/jaxws" xmlns:soap="http://cxf.apache.org/bindings/soap" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://cxf.apache.org/bindings/soap http://cxf.apache.org/schemas/configuration/soap.xsd http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd"> <!-- IP地址输入拦截器 --> <bean id="ipAddressInInterceptor" class="com.auto.webservice.servlet.IpAddressInInterceptor" /> <jaxws:server id="workflow" serviceClass="com.auto.webservice.server.WorkflowService" address="/workflow"> <jaxws:serviceBean> <bean class="com.auto.webservice.server.WorkflowServiceImpl" /> </jaxws:serviceBean> </jaxws:server> </beans>
接口类
WorkflowService.java
package com.auto.webservice.server; import org.nutz.json.Json; import javax.jws.WebService; import java.util.HashMap; import java.util.List; import java.util.Map; /** * Created by wizzer on 15-4-13. */ @WebService(targetNamespace = "http://server.webservice.auto.com/", name = "workflowServicePortType") public interface WorkflowService { @WebResult(name = "return") @Action(input = "urn:start", output = "urn:startResponse") @RequestWrapper(localName = "start") @WebMethod(action = "urn:start") @ResponseWrapper(localName = "startResponse") String start(@WebParam(name = "flowKey") String flowKey, @WebParam(name = "userId") String userId);//启动流程 }
实现类
WorkflowServiceImpl.java
package com.auto.webservice.server; import org.activiti.engine.*; import org.activiti.engine.form.FormProperty; import org.activiti.engine.form.StartFormData; import org.activiti.engine.repository.ProcessDefinition; import org.activiti.engine.runtime.ProcessInstance; import org.activiti.engine.task.Task; import org.activiti.engine.task.TaskQuery; import org.nutz.dao.Dao; import org.nutz.ioc.loader.annotation.Inject; import org.nutz.ioc.loader.annotation.IocBean; import org.nutz.json.Json; import org.nutz.json.JsonFormat; import org.nutz.lang.Strings; import org.nutz.log.Log; import org.nutz.log.Logs; import org.nutz.mvc.Mvcs; import javax.jws.WebService; import java.util.HashMap; import java.util.List; import java.util.Map; /** * Created by wizzer on 15-4-13. */ @IocBean(name = "workflowService") @WebService public class WorkflowServiceImpl implements WorkflowService { private final Log log = Logs.get(); FormService formService=Mvcs.ctx().getDefaultIoc().get(FormService.class); IdentityService identityService=Mvcs.ctx().getDefaultIoc().get(IdentityService.class); RuntimeService runtimeService=Mvcs.ctx().getDefaultIoc().get(RuntimeService.class); TaskService taskService=Mvcs.ctx().getDefaultIoc().get(TaskService.class); RepositoryService repositoryService=Mvcs.ctx().getDefaultIoc().get(RepositoryService.class); /** * 启动一个流程 * * @param flowKey 流程模型key * @param userId 用户ID * @return */ public String start(String flowKey, String userId) { Map<String, Object> map = new HashMap<String, Object>(); try { if (!Strings.isEmpty(userId)) { identityService.setAuthenticatedUserId(userId); } ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(flowKey); map.put("errcode", 0); map.put("errmsg", ""); map.put("processInstanceId", processInstance.getId()); } catch (Exception e) { log.error("WebServcice启动流程出错", e); map.put("errcode", 1); map.put("errmsg", e.getMessage()); } finally { identityService.setAuthenticatedUserId(null); } return Json.toJson(map, JsonFormat.compact()); } }
/** * IP地址拦截器 * * @author Sunshine */ public class IpAddressInInterceptor extends AbstractPhaseInterceptor { private final Log log = Logs.get(); public IpAddressInInterceptor() { super(Phase.RECEIVE); } public void handleMessage(Message message) throws Fault { HttpServletRequest request = (HttpServletRequest) message.get(AbstractHTTPDestination.HTTP_REQUEST); //获取所有的白名单访问主机 UserInfoServiceImpl userInfoService = Mvcs.ctx().getDefaultIoc().get(UserInfoServiceImpl.class); List hostList = userInfoService.queryHostListByType("w"); // 取客户端IP地址 String ipAddress = request.getRemoteAddr(); // 如果允许访问的集合非空,继续处理,否则认为全部IP地址均合法 if (!hostList.isEmpty()) { boolean contains = false; for (ListInfo hostInfo : hostList) { log.debug("hostInfo:" + hostInfo.getIpaddress() + "|ipAddress:" + ipAddress); if (hostInfo.getIpaddress().equals(ipAddress)) { contains = true; break; } } if (!contains) { throw new Fault(new IllegalAccessException("IP address " + ipAddress + " is not allowed")); } } } }
本文地址:https://wizzer.cn/archives/3154 , 转载请保留.
我就是随便看看
刚接触Nutz,对注解也不太明白,能否给出服务端的实现代码和客户端调用服务的实现代码?或者能讲解下,非常感谢!!