用java 调用 .net 自定义的 Soap WEB Service

使用JDK自带的 JAX-WS调用。

先用vs2010写一个webService

1、自定义soap类

public class SecuritySOAPHeader : System.Web.Services.Protocols.SoapHeader
{
 public SecuritySOAPHeader()
 {
 }

    public string UserName { get; set; }
    public string UserPass { get; set; }

}

2.写webService

public SecuritySOAPHeader currentUser;

 

/// <summary>
    /// 取OU字串列表
    /// </summary>
    /// <param name="domainADsPath">LDAP</param>
    /// <returns></returns>
    [WebMethod(EnableSession = true), SoapHeader("currentUser")]
    public string SayHello(string name)
    {
        if (currentUser == null) return "需要验证";

        if (!ValidateUser(currentUser.UserName, currentUser.UserPass))
        {
            return "验证错误";
        }

        try
        {
            return name+"调用成功!";
        }
        catch(Exception ex)
        {
            return ex.Message;
        }
    }

 

#region 检测用户
    /// <summary>
    /// 检测用户
    /// </summary>
    /// <param name="user"></param>
    /// <param name="pass"></param>
    /// <returns></returns>
    private bool ValidateUser(string user, string pass)
    {
        string u = SoftoonHelpers.ConfigHelper.GetAppSection("wsUser");
        string p = SoftoonHelpers.ConfigHelper.GetAppSection("wsPwd");

        if (String.IsNullOrEmpty(u) || String.IsNullOrEmpty(p)) return false;
        //u = SoftoonHelpers.SecurityHelper.md5(u);
        p = SoftoonHelpers.SecurityHelper.md5(p);

        if (u.Equals(user) && p.Equals(pass))
        {
            return true;
        }
        return false;
    }
    #endregion

一个Service就成功了。

先说下用 .Net调,非常简单

1.先引用WEB e服务

2。调用

SecuritySOAPHeader head = new SecuritySOAPHeader();

            head.UserName = "jamin";
            head.UserPass = Md5("7csky.cn").ToUpper();
            SyncAD ws = new SyncAD();
            ws.SecuritySOAPHeaderValue = head;

 ws.SayHello("张三");

 

OK,马上Java调用

public static void main(String[] args) throws MalformedURLException {

 

URL url=new URL("http://172.24.29.235:90/ws/SyncAD.asmx?wsdl");
  QName qName=new QName("http://WebAD.com/", "SyncAD");

  SyncAD ad=new SyncAD(url, qName);
  
  HeaderHandlerResolver handlerResolver=new HeaderHandlerResolver();
  ad.setHandlerResolver(handlerResolver);


  SyncADSoap p= ad.getSyncADSoap();

String hello=p.SayHello("张三");

 

}

 

要写二个自定义的

麻烦就在这里了.

 

public class HeaderHandlerResolver implements HandlerResolver {

 @SuppressWarnings("rawtypes")
 @Override
 public List<Handler> getHandlerChain(PortInfo portInfo) {
  List<Handler> handlerChain = new ArrayList<Handler>(); 
        HeaderHandler hh = new HeaderHandler(); 
     handlerChain.add(hh);
     return handlerChain;
 }
}

 

public class HeaderHandler implements SOAPHandler<SOAPMessageContext> {

 @Override
 public boolean handleMessage(SOAPMessageContext context) {
  Boolean request_p = (Boolean) context.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);

  if (request_p) {
   try {
    
    SOAPMessage msg = context.getMessage();
    //从SOAP信息中取出认证信息
    SOAPEnvelope env = msg.getSOAPPart().getEnvelope();
    SOAPHeader hdr = env.getHeader();
  
    if (hdr == null)
     hdr = env.addHeader();

    // 添加认证信息 自定义soap头名
    QName qname_user = new QName("http://WebAD.com/", "SecuritySOAPHeader");
    SOAPHeaderElement sso = hdr.addHeaderElement(qname_user);
    sso.setActor(SOAPConstants.URI_SOAP_1_2_ROLE_NEXT);
    //名称   有前缀则加
    SOAPElement username = sso.addChildElement("UserName");
    //值
    username.addTextNode("jamin");
    SOAPElement psw = sso.addChildElement("UserPass");
    psw.addTextNode("7csky.cn");
    
    msg.saveChanges();
    // 把SOAP消息输出到System.out,即控制台 调试信息
    //msg.writeTo(System.out);
    return true;
   } catch (Exception e) {
    e.printStackTrace();
   }
  }
  return false;
 }

 @Override
 public boolean handleFault(SOAPMessageContext context) {
  // TODO Auto-generated method stub
  return false;
 }

 @Override
 public void close(MessageContext context) {
  // TODO Auto-generated method stub
  
 }

 @Override
 public Set<QName> getHeaders() {
  // TODO Auto-generated method stub
  return null;
 }
}

posted @ 2011-09-07 11:37  jamin  阅读(564)  评论(0编辑  收藏  举报