gpt4 book ai didi

java - 无法使用 Web 服务的二维对象返回值

转载 作者:行者123 更新时间:2023-12-01 15:21:10 25 4
gpt4 key购买 nike

我有以下网络服务:

 @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;
}

它应该用字符串形式的“case type”名称填充第一个维度,用整数组成的“case type”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并尝试遵循他的解决方案,但没有帮助。

我需要做什么才能使用该方法提供的引用资料?

提前致谢!

最佳答案

我认为你的网络服务应该返回一个特定于应用程序的对象的列表,而不是一个普通的 2-dim 数组。您的 Web 服务响应包含一个“case type”对象列表,其中包含 string 和 int 字段。因此,最好(在网络服务端)创建一个与此类似的类:

class CaseType {
private int id;
private String name;
// getters, setters
}

Web 服务基本上应该返回 CaseType 对象的列表 ( List<CaseType> )。它不仅可以解决您的 Web 服务问题,而且还可以改进总体设计,因为使用显式和命名类是自文档化的,并且更易于阅读和维护。

关于java - 无法使用 Web 服务的二维对象返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10905893/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com