1

Web サービス リクエストのパラメータとして列挙を追加したいと考えています。Androidでksoap2を使用していますが、java.lang.RuntimeException: Cannot serialize: UNDEFINED when pass enumeration I implement enumeration follow How to pass a enum value to wcf webservice (Fildor answer)

interface BaseEnum extends Marshal
{
    public String getDesc(Enum en);
}
enum DrivingLicenseTypeEnum implements BaseEnum 
{
    UNDEFINED,
    NSURED_DRIVER_INJURED,
    INSURED_PASSENGER_INJURED,
    PARTY_DRIVER_INJURED,
    PARTY_PASSENGER_INJURED,
    THIRD_PARTY_INJURED,
    INSURED_VEHICLE_DAMAGE,
    PARTY_VEHICLE_DAMAGE,
    ASSET;

    public  String getDesc(Enum en) {
        String result="";
        //generate description
        return result;
    }

    public Object readInstance(XmlPullParser arg0, String arg1, String arg2,
            PropertyInfo arg3) throws IOException, XmlPullParserException {
        // TODO Auto-generated method stub
        return DrivingLicenseTypeEnum.valueOf(arg0.nextText());
    }

    public void register(SoapSerializationEnvelope arg0) {
        arg0.addMapping("http://tempuri.org/", "DrivingLicenseTypeEnum", DrivingLicenseTypeEnum.class);
    }

    public void writeInstance(XmlSerializer arg0, Object arg1)
            throws IOException {
        arg0.text(((DrivingLicenseTypeEnum)arg1).name());
    }
}

そして私はDrivingLicenseTypeEnumをパラメータとして渡します

DrivingLicenseTypeEnum c = DrivingLicenseTypeEnum.UNDEFINED;
PropertyInfo pi=new PropertyInfo();
pi.setName("driverLicenseType");
pi.setValue(c);
pi.setType(DrivingLicenseTypeEnum.class);
request.addProperty(pi);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.setOutputSoapObject(request);
c.register(envelope);

この問題を解決するために私を助けてくれませんか? どうもありがとうございました。

4

1 に答える 1

0

ああ、私はマーシャルを実装する列挙型を使用しているため、この問題が発生するという答えを得ました。この列挙型をクラスと列挙型に分割すると、たとえば

enum DrivingLicenseTypeEnum 
{
    UNDEFINED,
    NSURED_DRIVER_INJURED,
    INSURED_PASSENGER_INJURED,
    PARTY_DRIVER_INJURED,
    PARTY_PASSENGER_INJURED,
    THIRD_PARTY_INJURED,
    INSURED_VEHICLE_DAMAGE,
    PARTY_VEHICLE_DAMAGE,
    ASSET
}

class DrivingLicenseTypeEnumClass implements Marshal
{
public Object readInstance(XmlPullParser arg0, String arg1, String arg2,
            PropertyInfo arg3) throws IOException, XmlPullParserException {
        // TODO Auto-generated method stub
        return DrivingLicenseTypeEnum.valueOf(arg0.nextText());
    }

    public void register(SoapSerializationEnvelope arg0) {
        arg0.addMapping("http://tempuri.org/", "DrivingLicenseTypeEnum", DrivingLicenseTypeEnum.class,new DrivingLicenseTypeEnumClass());
    }

    public void writeInstance(XmlSerializer arg0, Object arg1)
            throws IOException {
        arg0.text(((DrivingLicenseTypeEnum)arg1).name());
    }

}

正しく動作します。

于 2012-05-06T07:05:56.797 に答える