开发者

Need to create a serializable key value map without using java.util.Map, keep running into NullPointerException with my workaround

I'm trying to consume a third party web service with OracleAS web services. The operation I'm trying to call is requesting a java.util.Map as one of it's input parameters. It's expecting a stucture like this:

<in1>
    <!--Zero or more repetitions:-->
    <item>
        <key>?</key>
        <value>?</value>
    </item>
</in1>

The problem I have run into is that OracleAS web services uses a proprietary namespace to serialize all java.util.Map datatypes. (source: table H-5)(also see my original stackoverflow question about this issue here). To get around this I need to trick my web service into creating a serializable key-value item element without using java.util.Map.

I've created the following classes but keep running into a NullPointerException and cannot figure out to have multiple <item> element with populated key value pairs inside.

Any help would be greatly appreciated. Thanks!

Main Class

public class CreateStructure {
    public static void main(String[] args) {
       CustomItem inputParamMap = new CustomItem(2);
       inputParamMap.setItem("HireDate", "2011-12-31", 0);
       inputParamMap.setItem("status", "Hired", 1);

    }
}

CustomItem Class

public class CustomItem implements java.io.Serializable {
    protected JAXRpcMapEntry[] item;

        //Constructor
    public CustomItem(int index) {
        item = new JAXRpcMapEntry[index];
    }

        //methods
    public JAXRpcMapEntry[] getItem() {
        return item;
    }

    public void setItem(JAXRpcMapEntry[] item) {
        this.item = item;
    }

    public void setItem(java.lang.Object key, java.lang.Object value, int index) {
        this.item[index].setKey((String)key);
        this.item[index].setValue((String)value);
    }

    public JAXRpcMapEntry[] getItem(int index) {
        return this.getItem(index);
    }
}

JAXRpcMapEntry class

public class JAXRpcMapEntry
        implements java.io.Serializable
{
        //
        // Constructors
        //
        public JAXRpcMapEntry() { }

        public JAXRpcMapEntry(java.lang.Object p1, java.lang.Object p2) { }

        //
        // Fields
        //
        private java.lang.Object key;

        private java.lang.Object value;

        //
        // Methods
        //
        public java.lang.Object getKey() {
            return this.key;
        }

        pub开发者_如何转开发lic void setKey(java.lang.Object p1) { }

        public java.lang.Object getValue() {
            return this.value;
        }

        public void setValue(java.lang.Object p1) { }

        public boolean equals(java.lang.Object p1) {
            if(this.equals(p1)){
                return true;
            }
            else
            {
                return false;
            }
        }
}


The reason you are getting the null pointer exception is that the elements in your array are not initialized. In other words, you are setting key and value to null objects. A quick fix would be:

public void setItem(java.lang.Object key, java.lang.Object value, int index) {
   this.item[index] = new JAXRpcMapEntry(key, value);
}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜