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);
}
精彩评论