2011-04-29 23 views
7

¿puede ksoap2 pasar una enumeración al servicio web?Cómo pasar un valor enum al servicio web wcf

hay un servicio web WCF:

[OperationContract] 
string TestEnum(CodeType code); 

CodeType es dotnet enumeración:

public enum CodeType 
    { 
     [EnumMember] 
     ALL, 

     [EnumMember] 
     VehicleColor 
    } 

¿Cómo puedo llamar a este servicio web WCF al cliente de Android?

creo un tipo de código enum e implementa KvmSerializable. En el método getPropertyInfo, ¿cuál es el valor de info.name (info.type)?

public enum CodeType implements KvmSerializable, BaseInterface { 
    ALL, 

    VehicleColor; 
//....... 
    @Override 
    public void getPropertyInfo(int index, Hashtable properties, PropertyInfo info) { 
     //info.namespace = this.NameSpace; 
     info.name = ?; 
     info.type = ?; 

    } 
} 

Gracias por su ayuda.

+0

Tengo el mismo problema, ¿alguien resolvió esto? ¡Gracias por adelantado! – cbuck12000

+0

@ cbuck12000: No estoy seguro si recibirás una notificación de mi respuesta o no, pensé que me aseguraría de que supieras ... –

Respuesta

0

¿Usted se ha

[ServiceContract] 
[ServiceKnownType(typeof(CodeType))] 
public interface ITheService 
{ 
    [OperationContract] 
    string TestEnum(CodeType code); 
} 

y

[DataContract] 
public enum CodeType 
{ 
    // ... 
} 

?

Editar:

un poco de búsqueda también aparecido this, que puede ser de utilidad ...

+0

Creo que mi problema es con KSoap2. Cómo enviar un parámetro de valor enum a un método de servicio web o manejar una propiedad enum dentro de una clase devuelta por un método). Puedo serializar objetos complejos y cosas así, pero no hay enumeraciones? – cbuck12000

4

acabo resuelto ese problema a través de enumeración-Mariscal.

Creé un Java-Enum "copiando" el .net uno. Entonces escribí un mariscal de clase para ello:

public class MarshalEnum implements org.ksoap2.serialization.Marshal 
{ 
    ... // Singleton-Pattern 

    public Object readInstance(XmlPullParser xpp, String string, String string1, 
          PropertyInfo pi) 
     throws IOException, XmlPullParserException 
{ 
    return MyEnum.valueOf(xpp.nextText()); 
} 

public void writeInstance(XmlSerializer xs, Object o) 
     throws IOException 
{ 
    xs.text(((MyEnum)o).name()); 
} 

public void register(SoapSerializationEnvelope sse) 
{ 
    sse.addMapping(sse.xsd, "MyEnum", MyEnum.class, MarshalEnum.getInstance()); 
} 
} // class 

Entonces, cuando se llama al método en el que se enviarán MyEnum-Valores:

//... blah blah 
SoapSerializationEnvelope envelope = 
          new SoapSerializationEnvelope(SoapEnvelope.VER11); 
envelope.addMapping(SOAP_REMOTE_NAMESPACE, "MyEnum", MyEnum.class,  
        MarshalEnum.getInstance()); 
//... and so on. 

Nota que SOAP_REMOTE_NAMESPACE es el espacio de nombres contrato de datos de la enum para ser utilizado! Consulte el archivo wsdl para averiguarlo si no está seguro. Debería verse algo así como "http://schemas.datacontract.org/2009/08/Your.dotNet.Namespace".

Espero que esto también funcione para usted.

Cuestiones relacionadas