xfire客戶端代碼可以利用工具生成,但有些情況下工具沒法生成,無法只能手工編寫。本文記錄手工編寫客戶端代碼過程。
目錄:
目錄:
- QName的解釋
- 一、分析自動生成的代碼
- 二、自定義生成的代碼
QName的解釋
1.來歷:qname是qualified name 的簡寫
2.構成:由名字空間(NS)前綴(prefix)以及冒號(:),還有一個元素名稱構成
3.舉例:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
version="1.0">
<xsl:template match="foo">
<hr/>
</xsl:template>
</xsl:stylesheet>
xsl是名字空間前綴,template是元素名稱,xsl:template 就是一個qname。代表<xsl:template match="foo">標籤
4.總結:qname無非是有着特定格式的xml元素,其作用主要是增加了名字空間,比如有同樣的元素名稱,而名字空間不同的情況。舉例如下
一、分析自動生成的代碼。2個包中文件如下
2.構成:由名字空間(NS)前綴(prefix)以及冒號(:),還有一個元素名稱構成
3.舉例:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
version="1.0">
<xsl:template match="foo">
<hr/>
</xsl:template>
</xsl:stylesheet>
xsl是名字空間前綴,template是元素名稱,xsl:template 就是一個qname。代表<xsl:template match="foo">標籤
4.總結:qname無非是有着特定格式的xml元素,其作用主要是增加了名字空間,比如有同樣的元素名稱,而名字空間不同的情況。舉例如下
- 注:這是一段AS3的代碼。很好說明問題。函數trace相當於println
- var xml:XML =// 定義一個XML對象
- <xml>
- <ns1:node xmlns:ns1="http://www.ticore.com/ns1"/>
- <ns2:node xmlns:ns2="http://www.ticore.com/ns2"/>
- <ns3:node xmlns:ns3="http://www.ticore.com/ns3"/>
- <ns4:node xmlns:ns4="http://www.ticore.com/ns4"/>
- </xml>;
- trace(xml[new QName("http://www.ticore.com/ns1", "node")].toXMLString());
- trace(xml.elements(new QName("http://www.ticore.com/ns2", "node")).toXMLString());
- trace(xml.descendants(new QName("http://www.ticore.com/ns3", "node")).toXMLString());
- trace(xml.child(new QName("http://www.ticore.com/ns4", "node")).toXMLString());
一、分析自動生成的代碼。2個包中文件如下
com.reyosoft.app.webclient
XFireClientFactory.java
SigManager.java
SigManagerImpl.java
com.reyosoft.app.webclient.entity
package-info.java
ObjectFactory.java
SigServiceCategory.java
XFireClientFactory.java
SigManager.java
SigManagerImpl.java
com.reyosoft.app.webclient.entity
package-info.java
ObjectFactory.java
SigServiceCategory.java
1,package-info.java 看了就明白
@javax.xml.bind.annotation.XmlSchema(NS = "http://www.reyosoft.com/webservice")
package com.reyosoft.app.webclient.entity;
2,SigServiceCategory.java
package com.reyosoft.app.webclient.entity;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "NewComplexType1"
public class SigServiceCategory {
@XmlElement(name = "ESSC", required = true)
protected List<SigServiceCategory.Data> data;
public List<SigServiceCategory.Data> getData() {
if (data== null) {
data= new ArrayList<SigServiceCategory.Data>();
}
return this.data;
}
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = ""
public static class Data{
@XmlElement(name = "SCID", required = true)
protected String scid;
@XmlElement(name = "SCCategory", required = true)
protected String scCategory;
@XmlElement(name = "SCSub", required = true)
protected String scSub;
@XmlElement(name = "SCDesc", required = true)
protected String scDesc;
@XmlElement(required = true)
protected String sigNo;
省略setter和getter
}
}
"藍色"代碼是wsdl中對應的<wsdl:types>標籤下的對應的值。例如NewComplexType1 和ESSC對應
<wsdl:types>
<xsd:schema targetNS="" xmlns:tns="">
<xsd:complexType name="NewComplexType1">
<xsd:sequence>
<xsd:element name="ESSC" minOccurs="0" maxOccurs="unbounded">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="SCID"
type="xsd:string">
</xsd:element>
<xsd:element name="SCCategory"
type="xsd:string">
</xsd:element>
<xsd:element name="SCSub"
type="xsd:string">
</xsd:element>
<xsd:element name="SCDesc"
type="xsd:string">
</xsd:element>
<xsd:element name="sigNo"
type="xsd:string">
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
........
<xsd:schema targetNS="" xmlns:tns="">
<xsd:complexType name="NewComplexType1">
<xsd:sequence>
<xsd:element name="ESSC" minOccurs="0" maxOccurs="unbounded">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="SCID"
type="xsd:string">
</xsd:element>
<xsd:element name="SCCategory"
type="xsd:string">
</xsd:element>
<xsd:element name="SCSub"
type="xsd:string">
</xsd:element>
<xsd:element name="SCDesc"
type="xsd:string">
</xsd:element>
<xsd:element name="sigNo"
type="xsd:string">
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
........
3 ,ObjectFactory.java
package com.reyosoft.app.webclient.entity;
import javax.xml.bind.annotation.XmlRegistry;
@XmlRegistry
public class ObjectFactory {
public ObjectFactory() {
}
public SigServiceCategory createNewComplexType1(){
return new SigServiceCategory();
}
public SigServiceCategory.Data createNewComplexType1ESSC(){
return new SigServiceCategory.Data();
}
}
請注意這裏的兩個函數名規則。不用我說明應該知道怎麼回事了吧!
4,SigManager.java
package com.reyosoft.app.webclient;
@WebService(name = SIG_SN,
targetNS = SIG_NS)
public interface SigManager {
@WebMethod(operationName = "getServiceCategory", action = SIG_NS + "es_sig/getServiceCategory")
@WebResult(name = "getServiceCategoryResponse", targetNS = SIG_NS)
public SigServiceCategory getServiceCategory(
@WebParam(name = "getServiceCategoryUN", targetNS = SIG_NS)
String getServiceCategoryUN,
@WebParam(name = "getServiceCategoryPW", targetNS = SIG_NS)
String getServiceCategoryPW);
}
5, SigManagerImpl.java
package com.reyosoft.app.webclient;
@WebService( serviceName = SIG_SN,
targetNS = SIG_NS,
endpointInterface = "com.reyosoft.app.webclient.SigManager")
@SOAPBinding( style = SOAPBinding.Style.DOCUMENT,
use = SOAPBinding.Use.LITERAL,
parameterStyle = SOAPBinding.ParameterStyle.BARE)
public class SigManagerImpl implements SigManager{
/**
* {@inheritDoc}
*/
public SigServiceCategory getServiceCategory(String getServiceCategoryUN, String getServiceCategoryPW) {
throw new UnsupportedOperationException();
}
}
6, XFireClientFactory.java 不需要改動