刚接触soap,有几点疑问。
1.客户端发请求到服务器,会写一个xml,在这个xml里面有请求的urn,方法,参数等,是不是要解析这个xml读取里面的这些信息后去请求?若不是这样,一般是怎么用的?2.服务器端返回的信息怎么和一个xml文件关联,这个xml一般会怎么处理?

解决方案 »

  1.   

    soap 消息结构和wsdl中引用的schema定义有一定的关系,复杂的soap消息可能包括安全密钥,事务,session标识等等,具体WS调用时一般不需要关心这些细节,可以用axis或者CXF来处理这些内容。
      

  2.   

    跟webservice无关!!!!!!!!!
      

  3.   

    用asix对WebService的地址转换后会得些些类,使用这些类就可以调用WebService了,asix对xml进行相应的类转换
      

  4.   

    urn:服务名
    调用函数名
    设置参数
    得到结果以上是客户端的调用的一般过程。xml不用你去解析,发布的服务是个wsdl文件,客户端连接的时候会自己解析此文件提取或者封装数据。服务器返回也是xml文件 解析也不用你管
      

  5.   

    怎么都没有人知道呢?我用的是rpc远程调用,和webservice一点关系都没有,什么wsdl。
      

  6.   

    你问的是否是些底层的实现~~客户端根据WSDL 生成 SOAP 的请求消息, 通过 HTTP 传输方式传给对方, 服务方实现服务请求, 将结果以 SOAP 的消息格式返回给客户端。 人工去创建和解析基于 XML 格式的 SOAP 消息还是一个非常复杂的过程, 
    这样 就使用JAX-RPC。
    JAX - RPC :Java APIs for XML-Based Remote Procedure Call. 它本质上是另一种RMI。 只是 JAX-RPC 以 SOAP 作为通信协议, RMI 以 RMI- IIOP或者 RMI - JRMP为通信协议。 简单对象访问协议(SOAP)提供了标准的RPC方法来调用你的WebService。SOAP规范定义了SOAP消息的格式,以及怎样通过Http协议来使用SOAP。SOAP也是基于XML和XSD的,XML是SOAP的数据编码格式。
      

  7.   

    A)soap 不是什么深奥的东西,说白了就是用 http传输xml的String。B)
    1.如果你收发的request response不是什么复杂的结构,你可以直接用UrlConnection发送请求,用string或者正则表达式解析responsepublic void sendXML(String filePath,String _url) throws Exception{
     String urlString = _url;
            String xmlFile = filePath;
            URL url = new URL(urlString);         HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();;         File fileToSend=new File(xmlFile);
            byte[] buf=new byte[(int)fileToSend.length()];
            new FileInputStream(xmlFile).read(buf);
            httpConn.setRequestProperty( "Content-Length",String.valueOf( buf.length ) );
            httpConn.setRequestProperty("Content-Type","text/xml; charset=utf-8");
            httpConn.setRequestProperty("SOAPAction","your SOAPAction");
            httpConn.setRequestProperty("Accept","text/xml, text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2");
            httpConn.setRequestMethod( "POST" );
            httpConn.setDoOutput(true);
            httpConn.setDoInput(true);
            OutputStream out = httpConn.getOutputStream();
            out.write( buf );
            out.close();
           
            InputStreamReader isr = new InputStreamReader(httpConn.getInputStream(),"utf-8");
            BufferedReader in = new BufferedReader(isr);
           
            String inputLine;
            BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(new FileOutputStream("result.xml")));
            while ((inputLine = in.readLine()) != null){
                System.out.println(inputLine);
                bw.write(inputLine);
                bw.newLine();
            }
            bw.close();
            in.close();
    }
    2.如果方法一不能满足你的需求
    你就得根据 WSDL文件来生成 WSDL SOAP Stub Functions和wsdl定义的 objects,然后调用. 推荐你直接用jdk1.6 bin目录下的 wsimport(这样无需axis这样的第三方的东西)
    例如wsimport -d ./bin -s ./src -p test.jws.client.ref http://127.0.0.1:8080/webservice/hws?wsdl如何调用这里说不清楚,你搜个例子看看会比较直观,也很简单。
      

  8.   

    我说错了,刚接触soap,webservice,wsdl,就要马上做两平台接口的通讯。
    给个需求大家帮我看:
    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <soapenv:Body>
        <ns1:corpBinding soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" 
    xmlns:ns1="http://eaaapi.eaa.eidc.huawei.com">
          <msg xsi:type="soapenc:string" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
    协议数据单元PDU</msg>
        </ns1:corpBinding>
      </soapenv:Body>
    </soapenv:Envelope>PDU组成 描述
    Message Header 消息头
    Message Body 消息体
    消息头和消息体在xml中的表现形式如下:
    <?xml version="1.0" encoding="UTF-8"?>
    < MSG >
    <HEAD>
        < Attribute1>消息头属性一</Attribute1>
    </HEAD>
    <BODY>加密后的消息体</BODY>
    接口描述
    我们用WSDL(Web Services Description Language)来对接口进行描述。
           基本协议
       双方的消息交互采用SOAP
    需求就是这样,客户急着要马上做出来,而我第一次接触这个,求解决方案!!
      

  9.   

    这里面既有soap,因为xml就是soap的xml的那种形式,又有wsdl,那它是做什么的??欢迎在线跟帖,问题解决了另开帖给分!!!