我试图从.NET使用java Web服务。我没有得到适当的输出

时间:2014-10-11 15:57:08

标签: java java-client

代码:

public static void main(String[] args) {
    try {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        System.out.println("Enter the BookName:");
        String bookName = br.readLine();
        System.out.println("Book Id is: " +bookInfo(bookName).getBookAvail().get(0).getBookID().toString());
        System.out.println("Book Name is: " +bookInfo(bookName).getBookAvail().get(0).getBookName().toString());
    } catch (IOException ex) {
        Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
    }
     try {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        System.out.println("Enter the StudentID:");
        String studentID = br.readLine();
        System.out.println("Student Information is: " +studentInfo(studentID));
    } catch (IOException ex) {
        Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
    }
}

private static ArrayOfBookAvail bookInfo(java.lang.String bookName) {
    org.tempuri.BookService service = new org.tempuri.BookService();
    org.tempuri.IBookService port = service.getBasicHttpBindingIBookService();
    return port.bookInfo(bookName);
}

private static ArrayOfStudInfo studentInfo(java.lang.String studentID) {
    org.tempuri.BookService service = new org.tempuri.BookService();
    org.tempuri.IBookService port = service.getBasicHttpBindingIBookService();
    return port.studentInfo(studentID);
}

}

我得到的输出是:

Enter the BookName:
Core Servlets and JavaServer Pages, Volume 2:Advanced Technologies
Book Id is: javax.xml.bind.JAXBElement@196da649
Enter the StudentID:
    13MCAL058
Student Information is: org.datacontract.schemas._2004._07.lms.ArrayOfStudInfo@2b08bc5a

请帮助获得正确的输出。 提前谢谢。

1 个答案:

答案 0 :(得分:0)

Book Id is: javax.xml.bind.JAXBElement@196da649

看起来bookInfo(bookName).getBookAvail().get(0).getBookID()会返回JAXBElement。您只需拨打getValue()而不是toString()即可获取该值。当您致电toString()时,如果该类没有覆盖继承的toString()的{​​{1}},那么将调用Object.class,这是该内存的位置。对象

Object#toString()

假设该值只是一个原语或String,那么输出应该没问题。


bookInfo(bookName).getBookAvail().get(0).getBookID().getValue();

我不知道Student Information is: org.datacontract.schemas._2004._07.lms.ArrayOfStudInfo@2b08bc5a 班是什么。但它似乎是同一个问题,其中调用ArrayOfStudInfo来获取String表示。如果不了解Object#toString()类的更多信息,假设它是您的类,您可以在该类中覆盖ArrayOfStudInfo,以显示您想要成为字符串的内容表示。例如

toString()

现在我不知道这个班级是什么,我只是在那里抛出一个想法。如果你不能改变类,那么你总是可以通过从返回的对象中提取值来创建一个字符串。


从这一点来看,当你尝试在print语句中放入一个非原始对象时,它需要有一个String表示,由class ArrayOfStudInfo { StudentInfo[] studentInfoArray; @Override public String toString() { StringBuilder builder = new StringBuilder(); for (StudentInfo info : studentInfoArray) { builder.append(info.getFirstName()) .append(" ") .append(info.getLastName()) .append("\n"); } return builder.toString(); } } 方法表示。