先前没有搞过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.set
OperationName(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方法,控制台就会打印出你所需要的信息