0

我有以下网络服务:

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

我在访问用 java 编写的 Web 服务方法时阅读了A java.lang.ClassCastException。jaxb并试图遵循他的解决方案,但它没有帮助。

我必须做什么才能使用该方法给我的参考资料?

提前致谢!

4

2 回答 2

1

我认为您的 Web 服务应该返回一个特定于应用程序的对象列表,而不是一个普通的 2-dim 数组。您的 Web 服务响应包含包含字符串和 int 字段的“案例类型”对象列表。所以最好(在网络服务端)创建一个类似于这样的类:

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

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

于 2012-09-24T09:35:04.273 回答
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);
}
于 2012-09-24T08:22:22.857 回答