我有以下网络服务:
@WebMethod(operationName = "getCaseTypeNamesAndIDs")
public Object [][] getCaseTypeNamesAndIDs() {
Object [][] nameIDs;
int [] ids;
ids = LOKmeth.getAllCaseTypes();
nameIDs = new Object [ids.length][2];
for(int ct = 0; ct < ids.length; ct++ )
{
nameIDs[ct][0] = LOKmeth.getCaseTypeName(ids[ct]);
}
for(int ct = 0; ct < ids.length; ct++ )
{
nameIDs[ct][1] = ids[ct];
}
return nameIDs;
}
应该以字符串的形式填充第一个维度的“案例类型”名称,并使用“整体”创建“案例类型”ID的第二个维度。
当我测试Web服务时,它会输出:
返回方法
java.util.List : "[net.java.dev.jaxb.array.AnyTypeArray@4a0cf658, net.java.dev.jaxb.array.AnyTypeArray@19013163, net.java.dev.jaxb.array.AnyTypeArray@1d516768]"
SOAP响应
<?xml version="1.0" encoding="UTF-8"?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
<ns2:getCaseTypeNamesAndIDsResponse xmlns:ns2="http://LOK_WS/">
<return>
<item xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">Bugg</item>
<item xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:int">3</item>
</return>
<return>
<item xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">Felrapport</item>
<item xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:int">1</item>
</return>
<return>
<item xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">Printer on fire</item>
<item xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:int">2</item>
</return>
</ns2:getCaseTypeNamesAndIDsResponse>
</S:Body>
</S:Envelope>
我认为方法返回是对数组的内存引用。
SOAP响应包含正确的数据。
我的问题如下: 如何在jsp页面中提取数据?
我尝试过做以下事情(有一些变化):
<%
try
{
lok_ws.CaseManagementWs_Service service = new lok_ws.CaseManagementWs_Service();
lok_ws.CaseManagementWs port = service.getCaseManagementWsPort();
java.util.List<net.java.dev.jaxb.array.AnyTypeArray> caseTypeNames = null;
caseTypeNames = port.getCaseTypeNamesAndIDs();
Object[][] result = new Object[1][];
result[0] = caseTypeNames.toArray();
out.println("<option value=\"\">");
out.println(result[0][0].toString());
out.println("</option>");
} catch (Exception ex)
{
// TODO handle custom exceptions here
}
%>
我读了A java.lang.ClassCastException while accessing web service method written in java. jaxb并尝试按照他的解决方案但没有帮助。
使用方法给我的参考资料我该怎么办?
提前致谢!
答案 0 :(得分:1)
我认为您的Web服务应该返回一个特定于应用程序的对象列表,而不是简单的2-dim数组。 您的Web服务响应包含一个包含字符串和int字段的“案例类型”对象列表。 因此,最好(在Web服务端)创建一个类似于此的类:
class CaseType {
private int id;
private String name;
// getters, setters
}
Web服务基本上应该返回一个CaseType对象列表(List<CaseType>
)。它不仅可以解决您的Web服务问题,而且还可以改进一般设计,因为使用显式和命名类是自我记录的,更易于阅读和维护。
答案 1 :(得分:0)
我和你有同样的问题,我期待着2个暗淡的阵列。幸运的是,我的朋友帮助了我!
这是我的解决方案:
StringArray[] user = response.get_return();
for(int i = 0; i < user.length; i++){
String[] a = user[i].getItem();
for(String c:a)
System.out.println(c);
}