zoukankan      html  css  js  c++  java
  • Java调用wcf

    使用分布式编程,很方便不同编程语言之间互相访问,但也必须注意一些技术细节,实现起来才能畅通无阻,取得事半功倍的效果。

    首先,创建一个WCF。使用原有网站或新建一个网站,并将端口动态改为固定,如设成8000。在网站中添加WCF服务,取名字为:GetAccountService.svc,这时同时生成了一个接口:IGetAccountService.cs和一个实现类:GetAccountService.cs,并且有一个默认方法。我们为了测试对数据库的访问,将方法改为:GetAccount。

    完成的代码如下:

    1.IGetAccountService.cs

    using System;

    using System.Collections.Generic;

    using System.Linq;

    using System.Runtime.Serialization;

    using System.ServiceModel;

    using System.Text;



    // 注意: 如果更改此处的接口名称 "IGetAccountService",也必须更新 Web.config 中对 "IGetAccountService" 的引用。

    [ServiceContract]

    public interface IGetAccountService

    {

    [OperationContract]

    Account GetAccount(String username);

    }

    2.GetAccountService.cs

    using System;

    using System.Collections.Generic;

    using System.Linq;

    using System.Runtime.Serialization;

    using System.ServiceModel;

    using System.Text;

    using System.Data;

    using System.Data.SqlClient;



    // 注意: 如果更改此处的类名 "GetAccountService",也必须更新 Web.config 中对 "GetAccountService" 的引用。

    public class GetAccountService : IGetAccountService

    {



    public Account GetAccount(String username)

    {

    String dbconn
    = global::System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;

    String sqlString
    = "SELECT userId, userName FROM UserAccount where userName='" + username + "'";

    Account account
    = new Account();

    using (SqlConnection conn = new SqlConnection(dbconn))

    {

    conn.Open();

    SqlCommand cmd
    = new SqlCommand();

    cmd.Connection
    = conn;

    cmd.CommandText
    = sqlString;

    SqlDataReader rd
    = cmd.ExecuteReader();



    if (rd.Read())

    {

    account.Userid
    = Convert.ToInt32(rd["userId"]);

    account.Username
    = rd["userName"].ToString();

    }

    }

    return account;

    }

    }

    3.代码涉及到一个Account对象:

    using System;

    using System.Data;

    using System.Linq;

    /// <summary>

    ///Account 的摘要说明

    /// </summary>

    public class Account

    {

    private int m_userid;

    private String m_username;



    public Account()

    {

    //

    //TODO: 在此处添加构造函数逻辑

    //

    }



    public int Userid

    {

    get{ return m_userid;}

    set { m_userid = value; }

    }



    public String Username

    {

    get { return m_username; }

    set { m_username = value; }

    }

    }

    这时,右击GetAccountService.svc选择“在浏览器中查看”,可以看到服务已经运行,并且也打印出了访问服务的URL:“http://localhost:8000/WebWcf/GetAccountService.svc?wsdl”这个时候如果用.net来访问服务是没有问题的,但是如果用Java访问还是不行。程序上并没有错误,只是协议有点小问题。必须将Web.config中的wsHttpBinding改为:basicHttpBinding才行:

    <system.serviceModel>

    <behaviors>

    <serviceBehaviors>

    <behavior name="GetAccountServiceBehavior">

    <serviceMetadata httpGetEnabled="true" />

    <serviceDebug includeExceptionDetailInFaults="false" />

    </behavior>

    </serviceBehaviors>

    </behaviors>

    <services>

    <service behaviorConfiguration="GetAccountServiceBehavior" name="GetAccountService">

    <endpoint address="" binding="basicHttpBinding" contract="IGetAccountService">

    <identity>

    <dns value="localhost" />

    </identity>

    </endpoint>

    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />

    </service>

    </services>

    </system.serviceModel>

    好了,现在可以用Java访问了。Java的访问工具比较好用的还是axis,可以到网上下载。有了axis后,可以编写一个脚本,用来生成一些基本代码。例如编写如下一个脚本,并存为wcf.bat文件:

    set Axis_Lib=axis-1_4\lib

    set Java_Cmd
    =java -Djava.ext.dirs=%Axis_Lib%

    set Output_Path
    =.

    set Package
    =wcf

    %Java_Cmd% org.apache.axis.wsdl.WSDL2Java http://localhost:8000/WebWcf/GetAccountService.svc?wsdl -o%Output_Path% -p%Package%

    其中的lib为axis工具包中的lib目录,它包含了需要用到的Jar。在Dos下运行wcf.bat,即在当前目录中创建了目录wcf,并生成了五个Java程序,代码分别为:

    1.  BasicHttpBinding_IGetAccountServiceStub.java

    代码
    /**
    * BasicHttpBinding_IGetAccountServiceStub.java
    *
    * This file was auto-generated from WSDL
    * by the Apache Axis 1.4 Apr 22, 2006 (06:55:48 PDT) WSDL2Java emitter.
    */

    package wcf;

    public class BasicHttpBinding_IGetAccountServiceStub extends org.apache.axis.client.Stub implements wcf.IGetAccountService {
    private java.util.Vector cachedSerClasses = new java.util.Vector();
    private java.util.Vector cachedSerQNames = new java.util.Vector();
    private java.util.Vector cachedSerFactories = new java.util.Vector();
    private java.util.Vector cachedDeserFactories = new java.util.Vector();

    static org.apache.axis.description.OperationDesc [] _operations;

    static {
    _operations
    = new org.apache.axis.description.OperationDesc[3];
    _initOperationDesc1();
    }

    private static void _initOperationDesc1(){
    org.apache.axis.description.OperationDesc oper;
    org.apache.axis.description.ParameterDesc param;
    oper
    = new org.apache.axis.description.OperationDesc();
    oper.setName(
    "GetAccountPass");
    param
    = new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName("http://tempuri.org/", "uname"), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "string"), java.lang.String.class, false, false);
    param.setOmittable(
    true);
    param.setNillable(
    true);
    oper.addParameter(param);
    oper.setReturnType(
    new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "string"));
    oper.setReturnClass(java.lang.String.
    class);
    oper.setReturnQName(
    new javax.xml.namespace.QName("http://tempuri.org/", "GetAccountPassResult"));
    oper.setStyle(org.apache.axis.constants.Style.WRAPPED);
    oper.setUse(org.apache.axis.constants.Use.LITERAL);
    _operations[
    0] = oper;

    oper
    = new org.apache.axis.description.OperationDesc();
    oper.setName(
    "GetAccountName");
    oper.setReturnType(
    new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "string"));
    oper.setReturnClass(java.lang.String.
    class);
    oper.setReturnQName(
    new javax.xml.namespace.QName("http://tempuri.org/", "GetAccountNameResult"));
    oper.setStyle(org.apache.axis.constants.Style.WRAPPED);
    oper.setUse(org.apache.axis.constants.Use.LITERAL);
    _operations[
    1] = oper;

    oper
    = new org.apache.axis.description.OperationDesc();
    oper.setName(
    "GetAccount");
    param
    = new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName("http://tempuri.org/", "username"), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "string"), java.lang.String.class, false, false);
    param.setOmittable(
    true);
    param.setNillable(
    true);
    oper.addParameter(param);
    oper.setReturnType(
    new javax.xml.namespace.QName("http://schemas.datacontract.org/2004/07/", "Account"));
    oper.setReturnClass(wcf.Account.
    class);
    oper.setReturnQName(
    new javax.xml.namespace.QName("http://tempuri.org/", "GetAccountResult"));
    oper.setStyle(org.apache.axis.constants.Style.WRAPPED);
    oper.setUse(org.apache.axis.constants.Use.LITERAL);
    _operations[
    2] = oper;

    }

    public BasicHttpBinding_IGetAccountServiceStub() throws org.apache.axis.AxisFault {
    this(null);
    }

    public BasicHttpBinding_IGetAccountServiceStub(java.net.URL endpointURL, javax.xml.rpc.Service service) throws org.apache.axis.AxisFault {
    this(service);
    super.cachedEndpoint = endpointURL;
    }

    public BasicHttpBinding_IGetAccountServiceStub(javax.xml.rpc.Service service) throws org.apache.axis.AxisFault {
    if (service == null) {
    super.service = new org.apache.axis.client.Service();
    }
    else {
    super.service = service;
    }
    ((org.apache.axis.client.Service)
    super.service).setTypeMappingVersion("1.2");
    java.lang.Class cls;
    javax.xml.namespace.QName qName;
    javax.xml.namespace.QName qName2;
    java.lang.Class beansf
    = org.apache.axis.encoding.ser.BeanSerializerFactory.class;
    java.lang.Class beandf
    = org.apache.axis.encoding.ser.BeanDeserializerFactory.class;
    java.lang.Class enumsf
    = org.apache.axis.encoding.ser.EnumSerializerFactory.class;
    java.lang.Class enumdf
    = org.apache.axis.encoding.ser.EnumDeserializerFactory.class;
    java.lang.Class arraysf
    = org.apache.axis.encoding.ser.ArraySerializerFactory.class;
    java.lang.Class arraydf
    = org.apache.axis.encoding.ser.ArrayDeserializerFactory.class;
    java.lang.Class simplesf
    = org.apache.axis.encoding.ser.SimpleSerializerFactory.class;
    java.lang.Class simpledf
    = org.apache.axis.encoding.ser.SimpleDeserializerFactory.class;
    java.lang.Class simplelistsf
    = org.apache.axis.encoding.ser.SimpleListSerializerFactory.class;
    java.lang.Class simplelistdf
    = org.apache.axis.encoding.ser.SimpleListDeserializerFactory.class;
    qName
    = new javax.xml.namespace.QName("http://schemas.datacontract.org/2004/07/", "Account");
    cachedSerQNames.add(qName);
    cls
    = wcf.Account.class;
    cachedSerClasses.add(cls);
    cachedSerFactories.add(beansf);
    cachedDeserFactories.add(beandf);

    }

    protected org.apache.axis.client.Call createCall() throws java.rmi.RemoteException {
    try {
    org.apache.axis.client.Call _call
    = super._createCall();
    if (super.maintainSessionSet) {
    _call.setMaintainSession(
    super.maintainSession);
    }
    if (super.cachedUsername != null) {
    _call.setUsername(
    super.cachedUsername);
    }
    if (super.cachedPassword != null) {
    _call.setPassword(
    super.cachedPassword);
    }
    if (super.cachedEndpoint != null) {
    _call.setTargetEndpointAddress(
    super.cachedEndpoint);
    }
    if (super.cachedTimeout != null) {
    _call.setTimeout(
    super.cachedTimeout);
    }
    if (super.cachedPortName != null) {
    _call.setPortName(
    super.cachedPortName);
    }
    java.util.Enumeration keys
    = super.cachedProperties.keys();
    while (keys.hasMoreElements()) {
    java.lang.String key
    = (java.lang.String) keys.nextElement();
    _call.setProperty(key,
    super.cachedProperties.get(key));
    }
    // All the type mapping information is registered
    // when the first call is made.
    // The type mapping information is actually registered in
    // the TypeMappingRegistry of the service, which
    // is the reason why registration is only needed for the first call.
    synchronized (this) {
    if (firstCall()) {
    // must set encoding style before registering serializers
    _call.setEncodingStyle(null);
    for (int i = 0; i < cachedSerFactories.size(); ++i) {
    java.lang.Class cls
    = (java.lang.Class) cachedSerClasses.get(i);
    javax.xml.namespace.QName qName
    =
    (javax.xml.namespace.QName) cachedSerQNames.get(i);
    java.lang.Object x
    = cachedSerFactories.get(i);
    if (x instanceof Class) {
    java.lang.Class sf
    = (java.lang.Class)
    cachedSerFactories.get(i);
    java.lang.Class df
    = (java.lang.Class)
    cachedDeserFactories.get(i);
    _call.registerTypeMapping(cls, qName, sf, df,
    false);
    }
    else if (x instanceof javax.xml.rpc.encoding.SerializerFactory) {
    org.apache.axis.encoding.SerializerFactory sf
    = (org.apache.axis.encoding.SerializerFactory)
    cachedSerFactories.get(i);
    org.apache.axis.encoding.DeserializerFactory df
    = (org.apache.axis.encoding.DeserializerFactory)
    cachedDeserFactories.get(i);
    _call.registerTypeMapping(cls, qName, sf, df,
    false);
    }
    }
    }
    }
    return _call;
    }
    catch (java.lang.Throwable _t) {
    throw new org.apache.axis.AxisFault("Failure trying to get the Call object", _t);
    }
    }

    public java.lang.String getAccountPass(java.lang.String uname) throws java.rmi.RemoteException {
    if (super.cachedEndpoint == null) {
    throw new org.apache.axis.NoEndPointException();
    }
    org.apache.axis.client.Call _call
    = createCall();
    _call.setOperation(_operations[
    0]);
    _call.setUseSOAPAction(
    true);
    _call.setSOAPActionURI(
    "http://tempuri.org/IGetAccountService/GetAccountPass");
    _call.setEncodingStyle(
    null);
    _call.setProperty(org.apache.axis.client.Call.SEND_TYPE_ATTR, Boolean.FALSE);
    _call.setProperty(org.apache.axis.AxisEngine.PROP_DOMULTIREFS, Boolean.FALSE);
    _call.setSOAPVersion(org.apache.axis.soap.SOAPConstants.SOAP11_CONSTANTS);
    _call.setOperationName(
    new javax.xml.namespace.QName("http://tempuri.org/", "GetAccountPass"));

    setRequestHeaders(_call);
    setAttachments(_call);
    try { java.lang.Object _resp = _call.invoke(new java.lang.Object[] {uname});

    if (_resp instanceof java.rmi.RemoteException) {
    throw (java.rmi.RemoteException)_resp;
    }
    else {
    extractAttachments(_call);
    try {
    return (java.lang.String) _resp;
    }
    catch (java.lang.Exception _exception) {
    return (java.lang.String) org.apache.axis.utils.JavaUtils.convert(_resp, java.lang.String.class);
    }
    }
    }
    catch (org.apache.axis.AxisFault axisFaultException) {
    throw axisFaultException;
    }
    }

    public java.lang.String getAccountName() throws java.rmi.RemoteException {
    if (super.cachedEndpoint == null) {
    throw new org.apache.axis.NoEndPointException();
    }
    org.apache.axis.client.Call _call
    = createCall();
    _call.setOperation(_operations[
    1]);
    _call.setUseSOAPAction(
    true);
    _call.setSOAPActionURI(
    "http://tempuri.org/IGetAccountService/GetAccountName");
    _call.setEncodingStyle(
    null);
    _call.setProperty(org.apache.axis.client.Call.SEND_TYPE_ATTR, Boolean.FALSE);
    _call.setProperty(org.apache.axis.AxisEngine.PROP_DOMULTIREFS, Boolean.FALSE);
    _call.setSOAPVersion(org.apache.axis.soap.SOAPConstants.SOAP11_CONSTANTS);
    _call.setOperationName(
    new javax.xml.namespace.QName("http://tempuri.org/", "GetAccountName"));

    setRequestHeaders(_call);
    setAttachments(_call);
    try { java.lang.Object _resp = _call.invoke(new java.lang.Object[] {});

    if (_resp instanceof java.rmi.RemoteException) {
    throw (java.rmi.RemoteException)_resp;
    }
    else {
    extractAttachments(_call);
    try {
    return (java.lang.String) _resp;
    }
    catch (java.lang.Exception _exception) {
    return (java.lang.String) org.apache.axis.utils.JavaUtils.convert(_resp, java.lang.String.class);
    }
    }
    }
    catch (org.apache.axis.AxisFault axisFaultException) {
    throw axisFaultException;
    }
    }

    public wcf.Account getAccount(java.lang.String username) throws java.rmi.RemoteException {
    if (super.cachedEndpoint == null) {
    throw new org.apache.axis.NoEndPointException();
    }
    org.apache.axis.client.Call _call
    = createCall();
    _call.setOperation(_operations[
    2]);
    _call.setUseSOAPAction(
    true);
    _call.setSOAPActionURI(
    "http://tempuri.org/IGetAccountService/GetAccount");
    _call.setEncodingStyle(
    null);
    _call.setProperty(org.apache.axis.client.Call.SEND_TYPE_ATTR, Boolean.FALSE);
    _call.setProperty(org.apache.axis.AxisEngine.PROP_DOMULTIREFS, Boolean.FALSE);
    _call.setSOAPVersion(org.apache.axis.soap.SOAPConstants.SOAP11_CONSTANTS);
    _call.setOperationName(
    new javax.xml.namespace.QName("http://tempuri.org/", "GetAccount"));

    setRequestHeaders(_call);
    setAttachments(_call);
    try { java.lang.Object _resp = _call.invoke(new java.lang.Object[] {username});

    if (_resp instanceof java.rmi.RemoteException) {
    throw (java.rmi.RemoteException)_resp;
    }
    else {
    extractAttachments(_call);
    try {
    return (wcf.Account) _resp;
    }
    catch (java.lang.Exception _exception) {
    return (wcf.Account) org.apache.axis.utils.JavaUtils.convert(_resp, wcf.Account.class);
    }
    }
    }
    catch (org.apache.axis.AxisFault axisFaultException) {
    throw axisFaultException;
    }
    }

    }

    2.  GetAccountService.java

    代码
    /**
    * GetAccountService.java
    *
    * This file was auto-generated from WSDL
    * by the Apache Axis 1.4 Apr 22, 2006 (06:55:48 PDT) WSDL2Java emitter.
    */

    package wcf;

    public interface GetAccountService extends javax.xml.rpc.Service {
    public java.lang.String getBasicHttpBinding_IGetAccountServiceAddress();

    public wcf.IGetAccountService getBasicHttpBinding_IGetAccountService() throws javax.xml.rpc.ServiceException;

    public wcf.IGetAccountService getBasicHttpBinding_IGetAccountService(java.net.URL portAddress) throws javax.xml.rpc.ServiceException;
    }

    3.  GetAccountServiceLocator.java

    代码
    /**
    * GetAccountServiceLocator.java
    *
    * This file was auto-generated from WSDL
    * by the Apache Axis 1.4 Apr 22, 2006 (06:55:48 PDT) WSDL2Java emitter.
    */

    package wcf;

    public class GetAccountServiceLocator extends org.apache.axis.client.Service implements wcf.GetAccountService {

    public GetAccountServiceLocator() {
    }


    public GetAccountServiceLocator(org.apache.axis.EngineConfiguration config) {
    super(config);
    }

    public GetAccountServiceLocator(java.lang.String wsdlLoc, javax.xml.namespace.QName sName) throws javax.xml.rpc.ServiceException {
    super(wsdlLoc, sName);
    }

    // Use to get a proxy class for BasicHttpBinding_IGetAccountService
    private java.lang.String BasicHttpBinding_IGetAccountService_address = "http://localhost:8000/WebWcf/GetAccountService.svc";

    public java.lang.String getBasicHttpBinding_IGetAccountServiceAddress() {
    return BasicHttpBinding_IGetAccountService_address;
    }

    // The WSDD service name defaults to the port name.
    private java.lang.String BasicHttpBinding_IGetAccountServiceWSDDServiceName = "BasicHttpBinding_IGetAccountService";

    public java.lang.String getBasicHttpBinding_IGetAccountServiceWSDDServiceName() {
    return BasicHttpBinding_IGetAccountServiceWSDDServiceName;
    }

    public void setBasicHttpBinding_IGetAccountServiceWSDDServiceName(java.lang.String name) {
    BasicHttpBinding_IGetAccountServiceWSDDServiceName
    = name;
    }

    public wcf.IGetAccountService getBasicHttpBinding_IGetAccountService() throws javax.xml.rpc.ServiceException {
    java.net.URL endpoint;
    try {
    endpoint
    = new java.net.URL(BasicHttpBinding_IGetAccountService_address);
    }
    catch (java.net.MalformedURLException e) {
    throw new javax.xml.rpc.ServiceException(e);
    }
    return getBasicHttpBinding_IGetAccountService(endpoint);
    }

    public wcf.IGetAccountService getBasicHttpBinding_IGetAccountService(java.net.URL portAddress) throws javax.xml.rpc.ServiceException {
    try {
    wcf.BasicHttpBinding_IGetAccountServiceStub _stub
    = new wcf.BasicHttpBinding_IGetAccountServiceStub(portAddress, this);
    _stub.setPortName(getBasicHttpBinding_IGetAccountServiceWSDDServiceName());
    return _stub;
    }
    catch (org.apache.axis.AxisFault e) {
    return null;
    }
    }

    public void setBasicHttpBinding_IGetAccountServiceEndpointAddress(java.lang.String address) {
    BasicHttpBinding_IGetAccountService_address
    = address;
    }

    /**
    * For the given interface, get the stub implementation.
    * If this service has no port for the given interface,
    * then ServiceException is thrown.
    */
    public java.rmi.Remote getPort(Class serviceEndpointInterface) throws javax.xml.rpc.ServiceException {
    try {
    if (wcf.IGetAccountService.class.isAssignableFrom(serviceEndpointInterface)) {
    wcf.BasicHttpBinding_IGetAccountServiceStub _stub
    = new wcf.BasicHttpBinding_IGetAccountServiceStub(new java.net.URL(BasicHttpBinding_IGetAccountService_address), this);
    _stub.setPortName(getBasicHttpBinding_IGetAccountServiceWSDDServiceName());
    return _stub;
    }
    }
    catch (java.lang.Throwable t) {
    throw new javax.xml.rpc.ServiceException(t);
    }
    throw new javax.xml.rpc.ServiceException("There is no stub implementation for the interface: " + (serviceEndpointInterface == null ? "null" : serviceEndpointInterface.getName()));
    }

    /**
    * For the given interface, get the stub implementation.
    * If this service has no port for the given interface,
    * then ServiceException is thrown.
    */
    public java.rmi.Remote getPort(javax.xml.namespace.QName portName, Class serviceEndpointInterface) throws javax.xml.rpc.ServiceException {
    if (portName == null) {
    return getPort(serviceEndpointInterface);
    }
    java.lang.String inputPortName
    = portName.getLocalPart();
    if ("BasicHttpBinding_IGetAccountService".equals(inputPortName)) {
    return getBasicHttpBinding_IGetAccountService();
    }
    else {
    java.rmi.Remote _stub
    = getPort(serviceEndpointInterface);
    ((org.apache.axis.client.Stub) _stub).setPortName(portName);
    return _stub;
    }
    }

    public javax.xml.namespace.QName getServiceName() {
    return new javax.xml.namespace.QName("http://tempuri.org/", "GetAccountService");
    }

    private java.util.HashSet ports = null;

    public java.util.Iterator getPorts() {
    if (ports == null) {
    ports
    = new java.util.HashSet();
    ports.add(
    new javax.xml.namespace.QName("http://tempuri.org/", "BasicHttpBinding_IGetAccountService"));
    }
    return ports.iterator();
    }

    /**
    * Set the endpoint address for the specified port name.
    */
    public void setEndpointAddress(java.lang.String portName, java.lang.String address) throws javax.xml.rpc.ServiceException {

    if ("BasicHttpBinding_IGetAccountService".equals(portName)) {
    setBasicHttpBinding_IGetAccountServiceEndpointAddress(address);
    }
    else
    {
    // Unknown Port Name
    throw new javax.xml.rpc.ServiceException(" Cannot set Endpoint Address for Unknown Port" + portName);
    }
    }

    /**
    * Set the endpoint address for the specified port name.
    */
    public void setEndpointAddress(javax.xml.namespace.QName portName, java.lang.String address) throws javax.xml.rpc.ServiceException {
    setEndpointAddress(portName.getLocalPart(), address);
    }

    }

    4.  IGetAccountService.java

    代码
    /**
    * IGetAccountService.java
    *
    * This file was auto-generated from WSDL
    * by the Apache Axis 1.4 Apr 22, 2006 (06:55:48 PDT) WSDL2Java emitter.
    */

    package wcf;

    public interface IGetAccountService extends java.rmi.Remote {
    public java.lang.String getAccountPass(java.lang.String uname) throws java.rmi.RemoteException;
    public java.lang.String getAccountName() throws java.rmi.RemoteException;
    public wcf.Account getAccount(java.lang.String username) throws java.rmi.RemoteException;
    }

    5.  Account.java

    代码
    /**
    * Account.java
    *
    * This file was auto-generated from WSDL
    * by the Apache Axis 1.4 Apr 22, 2006 (06:55:48 PDT) WSDL2Java emitter.
    */

    package wcf;

    public class Account implements java.io.Serializable {
    private java.lang.Integer userid;

    private java.lang.String username;

    public Account() {
    }

    public Account(
    java.lang.Integer userid,
    java.lang.String username) {
    this.userid = userid;
    this.username = username;
    }


    /**
    * Gets the userid value for this Account.
    *
    *
    @return userid
    */
    public java.lang.Integer getUserid() {
    return userid;
    }


    /**
    * Sets the userid value for this Account.
    *
    *
    @param userid
    */
    public void setUserid(java.lang.Integer userid) {
    this.userid = userid;
    }


    /**
    * Gets the username value for this Account.
    *
    *
    @return username
    */
    public java.lang.String getUsername() {
    return username;
    }


    /**
    * Sets the username value for this Account.
    *
    *
    @param username
    */
    public void setUsername(java.lang.String username) {
    this.username = username;
    }

    private java.lang.Object __equalsCalc = null;
    public synchronized boolean equals(java.lang.Object obj) {
    if (!(obj instanceof Account)) return false;
    Account other
    = (Account) obj;
    if (obj == null) return false;
    if (this == obj) return true;
    if (__equalsCalc != null) {
    return (__equalsCalc == obj);
    }
    __equalsCalc
    = obj;
    boolean _equals;
    _equals
    = true &&
    ((
    this.userid==null && other.getUserid()==null) ||
    (
    this.userid!=null &&
    this.userid.equals(other.getUserid()))) &&
    ((
    this.username==null && other.getUsername()==null) ||
    (
    this.username!=null &&
    this.username.equals(other.getUsername())));
    __equalsCalc
    = null;
    return _equals;
    }

    private boolean __hashCodeCalc = false;
    public synchronized int hashCode() {
    if (__hashCodeCalc) {
    return 0;
    }
    __hashCodeCalc
    = true;
    int _hashCode = 1;
    if (getUserid() != null) {
    _hashCode
    += getUserid().hashCode();
    }
    if (getUsername() != null) {
    _hashCode
    += getUsername().hashCode();
    }
    __hashCodeCalc
    = false;
    return _hashCode;
    }

    // Type metadata
    private static org.apache.axis.description.TypeDesc typeDesc =
    new org.apache.axis.description.TypeDesc(Account.class, true);

    static {
    typeDesc.setXmlType(
    new javax.xml.namespace.QName("http://schemas.datacontract.org/2004/07/", "Account"));
    org.apache.axis.description.ElementDesc elemField
    = new org.apache.axis.description.ElementDesc();
    elemField.setFieldName(
    "userid");
    elemField.setXmlName(
    new javax.xml.namespace.QName("http://schemas.datacontract.org/2004/07/", "Userid"));
    elemField.setXmlType(
    new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "int"));
    elemField.setMinOccurs(
    0);
    elemField.setNillable(
    false);
    typeDesc.addFieldDesc(elemField);
    elemField
    = new org.apache.axis.description.ElementDesc();
    elemField.setFieldName(
    "username");
    elemField.setXmlName(
    new javax.xml.namespace.QName("http://schemas.datacontract.org/2004/07/", "Username"));
    elemField.setXmlType(
    new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "string"));
    elemField.setMinOccurs(
    0);
    elemField.setNillable(
    true);
    typeDesc.addFieldDesc(elemField);
    }

    /**
    * Return type metadata object
    */
    public static org.apache.axis.description.TypeDesc getTypeDesc() {
    return typeDesc;
    }

    /**
    * Get Custom Serializer
    */
    public static org.apache.axis.encoding.Serializer getSerializer(
    java.lang.String mechType,
    java.lang.Class _javaType,
    javax.xml.namespace.QName _xmlType) {
    return
    new org.apache.axis.encoding.ser.BeanSerializer(
    _javaType, _xmlType, typeDesc);
    }

    /**
    * Get Custom Deserializer
    */
    public static org.apache.axis.encoding.Deserializer getDeserializer(
    java.lang.String mechType,
    java.lang.Class _javaType,
    javax.xml.namespace.QName _xmlType) {
    return
    new org.apache.axis.encoding.ser.BeanDeserializer(
    _javaType, _xmlType, typeDesc);
    }

    }

    用上面代码可以用Eclipse创建一个Java测试工程,并将axis工具包Lib的Jar也导入工程中,再创建一个测试程序:ClientTest.java 

    package wcf;

    public class ClientTest {
    /**
    *
    @param args
    */
    public static void main(String[] args) {

    try {
    GetAccountService client
    = new GetAccountServiceLocator();
    Account account
    = new Account();
    account
    = client.getBasicHttpBinding_IGetAccountService().getAccount("abc");
    System.out.println(
    "account="+account.getUserid()+";"+account.getUsername());
    System.in.read();
    }
    catch (Exception e) {
    System.out.println(
    "Exception : " + e.getMessage());
    }

    }
    }

    确认WCF服务正在运行中,在Eclipse中打开上面程序,点击Run菜单,选择”Run as Java Application”,即可打印出运行结果:

    account=1;abc
  • 相关阅读:
    基于ZYNQ XC7Z045 FFG 900的高性能计算模块
    linux TCP数据包封装在SKB的过程分析
    关于 linux中TCP数据包(SKB)序列号的小笔记
    TCP的TIME_WAIT状态
    Linux-2.6.25 TCPIP函数调用大致流程
    Linux 下不经过BIOS重启(i386)
    Linux块设备加密之dm-crypt分析
    Device Mapper 代码分析
    Linux 下的一个全新的性能测量和调式诊断工具 Systemtap, 第 3 部分: Systemtap
    Linux 下的一个全新的性能测量和调式诊断工具 Systemtap, 第 2 部分: DTrace
  • 原文地址:https://www.cnblogs.com/chrischen662/p/1800130.html
Copyright © 2011-2022 走看看