webservice

吟风 关注

收藏于 : 2017-09-22 17:19   被转藏 : 1   

先前没有搞过webservice技术,偶然间接触了,没想到还是不难的。这个只是我本人的工作空间,对于码农们可能只可以作为参考,下面我们看一下代码:


首先我要请求一个网址:http://localhost:8080/hbyx/services/HBZY_ESB_YX_BusinessOrder?wsdl,调用已经封装好的接口。接口里已很多方法,调用接口里面某一个方法(方法名师随便定义的,要有意义)。
import java.net.URL;
import javax.xml.namespace.QName;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;

public class webservice {

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

    String xml = "<?xml version='1.0' encoding='GB2312'?>"+
    "<Msg>"+
    "<Head>"+
    "<Id/>" +
    "<Name>ZHYX_YHGC卷烟销售订单查询服务 </Name>"+
    "<Source>ZHYX</Source>"+
    "<Target>YHGC</Target>"+
    "<SerName>YHGC_JYXSDD</SerName>"+
    "<MsgType>0</MsgType>"+
    "<RtCode/>"+
        "<RtDesc/>"+
    "Backup1/>"+
    "<Backup2/>"+
    "<Backup3/>"+
    "<Backup4/>"+
    "<Backup5/>"+
    "<Date>2016-06-07 10:30:00</Date>"+
    "<Attrs>"+
      "<Attr>106882670,106882918,106882870</Attr>"+
      "<Attr></Attr>"+
    "</Attrs>"+
    "</Head>"+
    "<DATA>"+
    "<TABLE TABLENAME='' ACTION='INSERT'>"+
    "<ROW ACTION='INSERT'/>"+
    "</TABLE>"+
    "</DATA>"+
    "</Msg>" ;
Service sv = new Service();  //new 一个服务 
Call call = (Call) sv.createCall();
call.setTargetEndpointAddress(new URL("http://localhost:8080/hbyx/services/HBZY_ESB_YX_BusinessOrder?wsdl"));
call.setOperationName(new QName("getSaleOrderBill"));  //设置要调用的接口方法 
call.addParameter("id", org.apache.axis.encoding.XMLType.XSD_STRING,javax.xml.rpc.ParameterMode.IN

);//设置参数名 id  第二个参数表示String类型,第三个参数表示入参 
call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);//返回参数类型 
//开始调用方法,假设我传入的参数id的内容是1001   调用之后会根据id返回users信息,以xml格式的字符串返回,也可以json格式主要看对方用什么方式返回 
String result = (String) call.invoke(new Object[]{xml});
System.out.println(result);//打印字符串 
}
}












main方法运行此代码:被调用的网址会收到请求,然后会返回给我们一个xml格式的文件代码。
我们在项目里面src目录下创建一个NewXML.xml文件,把返回的xml格式的代码全部复制到新建的文件里面:
<?xml version="1.0" encoding="GB2312"?>
<Msg>
  <Head>
    <Id>YHGC_ZHYX1504773882755</Id>
    <Name>YHGC_ZHYX卷烟销售订单</Name>
    <Source>YHGC</Source>
    <Target>ZHYX</Target>
    <SerName>getSaleOrderBill</SerName>
    <MsgType>0</MsgType>
    <RtCode/>
    <RtDesc/>
    <Backup1/>
    <Backup2/>
    <Backup3/>
    <Backup4/>
    <Backup5/>
    <Date>2017-09-07 16:44:42</Date>
    <Attrs>
      <Attr/>
      <Attr/>
      <Attr/>
    </Attrs>
  </Head>
  <DATA>
    <TABLE TABLENAME="SRV_SCSS_SALEORDER" ID="销售订单编号" PLANTAX_DATE="指令开票日期" SELF_ID="销售订单编号" CONTRACTCODE="合同号" GJ_CODE="商业公司编码" CONTRACT_TYPE="收发类别" WHOUSE_CODE="合同仓库内码" MEMO="合同备注" SHIPPING_DATE="合同日期" PLANTAX_PERSONCODE="指令人员内码">
      <ROW ACTION="INSERT" ID="43499_1003" PLANTAX_DATE="2017-07-07" SELF_ID="43499" CONTRACTCODE="106882670" GJ_CODE="11130301" CONTRACT_TYPE="1001V51000000000C71O" WHOUSE_CODE="1003" MEMO="工商" SHIPPING_DATE="2017-07-06" PLANTAX_PERSONCODE="">
        <TABLE TABLENAME="SRV_SCSS_SALEORDER_B" CONTRACTCODE="合同号" SELF_ID="销售订单编号" WHOUSE_CODE="发货仓库内码" TOBA_CODE="卷烟企业内码" QUANTITY="数量" ALLOCATEPRICE="万支不含税调拨价" MEMO="合同卷烟备注">
          <ROW ACTION="INSERT" CONTRACTCODE="106882670" SELF_ID="43499" WHOUSE_CODE="1003" TOBA_CODE="127303" QUANTITY="250.000000" ALLOCATEPRICE="1481.000000" MEMO=""/>
        </TABLE>
      </ROW>
      <ROW ACTION="INSERT" ID="43589_1003" PLANTAX_DATE="2017-07-06" SELF_ID="43589" CONTRACTCODE="106882870" GJ_CODE="11130501" CONTRACT_TYPE="1001V51000000000C71O" WHOUSE_CODE="1003" MEMO="工商" SHIPPING_DATE="2017-07-06" PLANTAX_PERSONCODE="">
        <TABLE TABLENAME="SRV_SCSS_SALEORDER_B" CONTRACTCODE="合同号" SELF_ID="销售订单编号" WHOUSE_CODE="发货仓库内码" TOBA_CODE="卷烟企业内码" QUANTITY="数量" ALLOCATEPRICE="万支不含税调拨价" MEMO="合同卷烟备注">
          <ROW ACTION="INSERT" CONTRACTCODE="106882870" SELF_ID="43589" WHOUSE_CODE="1003" TOBA_CODE="196168" QUANTITY="500.000000" ALLOCATEPRICE="1777.000000" MEMO=""/>
        </TABLE>
      </ROW>
      <ROW ACTION="INSERT" ID="43636_1003" PLANTAX_DATE="2017-07-06" SELF_ID="43636" CONTRACTCODE="106882918" GJ_CODE="11130501" CONTRACT_TYPE="1001V51000000000C71O" WHOUSE_CODE="1003" MEMO="工商" SHIPPING_DATE="2017-07-06" PLANTAX_PERSONCODE="">
        <TABLE TABLENAME="SRV_SCSS_SALEORDER_B" CONTRACTCODE="合同号" SELF_ID="销售订单编号" WHOUSE_CODE="发货仓库内码" TOBA_CODE="卷烟企业内码" QUANTITY="数量" ALLOCATEPRICE="万支不含税调拨价" MEMO="合同卷烟备注">
          <ROW ACTION="INSERT" CONTRACTCODE="106882918" SELF_ID="43636" WHOUSE_CODE="1003" TOBA_CODE="126709" QUANTITY="500.000000" ALLOCATEPRICE="1231.000000" MEMO=""/>
        </TABLE>
      </ROW>
    </TABLE>
  </DATA>
</Msg>












操作完成以后我们建一个Java类,用来解析这个NewXML.xml文件:




import java.io

.File; 
import java.io

.FileWriter; 
import java.io

.IOException; 
import java.io

.InputStream; 
import java.util.List; 
 
import org.dom4j.Attribute; 
import org.dom4j.Document; 
import org.dom4j.DocumentException; 
import org.dom4j.DocumentHelper; 
import org.dom4j.Element; 
import org.dom4j.ProcessingInstruction; 
import org.dom4j.VisitorSupport; 
import org.dom4j.io

.SAXReader; 
import org.dom4j.io

.XMLWriter; 
 
/**
* Dom4j读写xml
* @author whwang
*/ 
public class TestDom4j { 
    public static void main(String[] args) { 
        read1(); 
        //read2(); 
        //write(); 
    } 
 
    public static void read1() { 
        try { 
            SAXReader reader = new SAXReader(); 
            InputStream in = TestDom4j.class.getClassLoader().getResourceAsStream("NEWFile.xml"); 
            Document doc = reader.read(in); 
            Element root = doc.getRootElement(); 
            readNode(root, ""); 
        } catch (DocumentException e) { 
            e.printStackTrace(); 
        } 
    } 
     
    @SuppressWarnings("unchecked") 
    public static void readNode(Element root, String prefix) { 
        if (root == null) return; 
        // 获取属性 
        List<Attribute> attrs = root.attributes(); 
        if (attrs != null && attrs.size() > 0) { 
            System.err.print(prefix); 
            for (Attribute attr : attrs) { 
                System.err.print(attr.getValue() + "\t"); 
            } 
            System.err.println(); 
        } 
        // 获取他的子节点 
        List<Element> childNodes = root.elements(); 
        prefix += "\t"; 
        for (Element e : childNodes) { 
            readNode(e, prefix); 
        } 
    } 
     
 




运行此main方法,控制台就会打印出你所需要的信息
 阅读文章全部内容  
点击查看
文章点评
相关文章
吟风 关注

文章收藏:1303

TA的最新收藏