xfire 客戶端代碼分析

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元素,其作用主要是增加了名字空間,比如有同樣的元素名稱,而名字空間不同的情況。舉例如下
  1. 注:這是一段AS3的代碼。很好說明問題。函數trace相當於println
  2. var xml:XML =// 定義一個XML對象
  3. <xml>
  4.  <ns1:node xmlns:ns1="http://www.ticore.com/ns1"/>
  5.  <ns2:node xmlns:ns2="http://www.ticore.com/ns2"/>
  6.  <ns3:node xmlns:ns3="http://www.ticore.com/ns3"/>
  7.  <ns4:node xmlns:ns4="http://www.ticore.com/ns4"/>
  8. </xml>;

  9. trace(xml[new QName("http://www.ticore.com/ns1""node")].toXMLString());
  10. trace(xml.elements(new QName("http://www.ticore.com/ns2""node")).toXMLString());
  11. trace(xml.descendants(new QName("http://www.ticore.com/ns3""node")).toXMLString());
  12. 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
    
     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"
, propOrder = { "data" })
public class SigServiceCategory {

    @XmlElement(name = "ESSC", required = true)     
    protected List<SigServiceCategory.Datadata;

 
    public List<SigServiceCategory.
Data> getData() {
        if (
data== null) {
            
data= new ArrayList<SigServiceCategory.Data>();
        }
        return this.
data;
    }

 
    @XmlAccessorType(XmlAccessType.FIELD)
    @XmlType(name = ""
, propOrder = { "scid", "scCategory", "scSub", "scDesc", "sigNo" })
    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>
            ........


”紅色“代碼是自定義變量
“刪除線” 代碼是可選的

 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")
@SOAPBindingstyle = 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 不需要改動
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章