Service调用

使用axis(版本1.4)调用cxf服务端一直调用不成功,郁闷了一上午啊。经过google之后,嘻嘻~终于得以解决,讲述一下我的代码和解决过程
---使用了bboss mvc集成的cxf作为ws服务端
axis需要的jar包:axis.jar,axis-ant.jar,commons-discovery-0.2.jar,commons-logging-1.0.4.jar,jaxrpc.jar,log4j-1.2.8.jar,saaj.jar,wsdl4j-1.5.1.jar
Java cxf端定义的接口代码   收藏代码
  1. import javax.jws.WebService;  
  2. /**  
  3.  * <p>类的描述:XX数据同步</p>  
  4.  * @author XX  
  5.  * @version 1.0  
  6.  * @date 2011-8-9 上午11:38:20  
  7.  */  
  8. @WebService(name="DataSynInf")  
  9. public interface DataSynInf {  
  10.           
  11.         /**  
  12.          * XXXXXXXXX  
  13.          * @param xml  
  14.          * @return  
  15.          */  
  16.         public String synMaterialAndBom(String xml);  
  17.   
  18. }  

Java axis调用端代码   收藏代码
  1. public static void testDemo() {  
  2.                 try {  
  3.   
  4.                         String endpoint = " http://172.16.81.65:8080/cxfservices/InterfacePort";  
  5.                         // 调用过程  
  6.                         Service service = new Service();  
  7.   
  8.                         Call call = (Call) service.createCall();  
  9.   
  10.                         call.setTargetEndpointAddress(new java.net.URL(endpoint));  
  11.   
  12.                         call.setOperationName("synMaterialAndBom");// WSDL里面描述的操作名称  
  13.   
  14.                         call.addParameter("xml",  
  15.                                         org.apache.axis.encoding.XMLType.XSD_STRING,  
  16.                                         javax.xml.rpc.ParameterMode.IN);// 操作的参数  
  17.   
  18.                         call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);// 设置返回类型  
  19.   
  20.                         call.setUseSOAPAction(true);  
  21.   
  22.                         // 给方法传递参数,并且调用方法  
  23.                         String temp = "good";  
  24.                         Object[] obj = new Object[] { temp };  
  25.                         String result = (String) call.invoke(obj);  
  26.   
  27.                         System.out.println("Result is : " + result);  
  28.                 } catch (Exception e) {  
  29.                         e.printStackTrace();  
  30.                 }  
  31.         }  
Service 调用 Service 的场景中,如果需要控制事务,可以使用 Spring 提供的声明式事务来管理事务。具体步骤如下: 1. 在调用 Service 方法的 Service 中配置事务管理器和事务通知。 ```xml <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean> <tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="*" propagation="REQUIRED" /> </tx:attributes> </tx:advice> <aop:config> <aop:pointcut id="servicePointcut" expression="execution(* com.example.service..*.*(..))" /> <aop:advisor advice-ref="txAdvice" pointcut-ref="servicePointcut" /> </aop:config> ``` 2. 在被调用Service 方法中添加事务注解。 ```java @Service public class UserServiceImpl implements UserService { @Autowired private UserDao userDao; @Transactional public void updateUserInfo(User user) { userDao.updateUser(user); } } ``` 3. 在调用 Service 方法的 Service 中注入被调用Service。 ```java @Service public class OrderServiceImpl implements OrderService { @Autowired private UserService userService; @Transactional public void createOrder(Order order) { // 创建订单 orderDao.createOrder(order); // 更新用户信息 User user = new User(); user.setId(order.getUserId()); user.setName(order.getUserName()); userService.updateUserInfo(user); } } ``` 通过以上配置,调用 ServiceService 在执行方法时会将事务传递给被调用Service,如果被调用Service 中发生异常,整个事务会回滚,确保数据的一致性和完整性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值