今天花了2个小时处理这个异常,使用了axis及soap方式都有问题,真的很奇怪,为什么都出现这种问题,基本上判断是.net服务器端出现问题,但是.net自己调用自己又没出现这个问题,最后的解决方案是将.net服务器端的namespace改成自己的,不使用默认的http://tempuri.org/,问题一下字解决了,我把我的代码出来,大家参考下,看了网上没有好的帖子说这方面的解决方案.
java 代码
java 代码
- package com.gztelecom.util;
- import javax.xml.namespace.QName;
- import org.apache.axis.client.*;
- public class WebServiceForCpOperate
- {
- private final static String endpoint = "http://***.com/service/DzChkService.asmx";
- public static boolean isValidCoupon(String couponid)
- {
- try
- {
- Service service = new Service();
- Call call = (Call) service.createCall();
- call.setTargetEndpointAddress(new java.net.URL(endpoint));
- call.setUseSOAPAction(true);
- call.setSOAPActionURI("http://***.com/service");
- call.setOperation("CouponValidateSMS");
- call.setOperationName(new QName("http://***.com/service",
- "CouponValidateSMS"));
- call.addParameter("couponid",
- org.apache.axis.Constants.XSD_STRING,
- javax.xml.rpc.ParameterMode.IN);
- call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);
- String k = (String) call.invoke(new Object[] { couponid });
- if(k == null || k.trim().equals("null") || k.trim().length()<=0)
- return false;
- //System.out.println(call.getResponseMessage().getSOAPPartAsString());
- return true;
- }
- catch (Exception ex)
- {
- ex.printStackTrace();
- }
- return false;
- }
- public static void main(String[] args)
- {
- System.out.println(isValidCoupon("142"));
- }
- }