Ich verwende Netbeans, um ein Webanwendungsprojekt zu erstellen. Die IDE fügt METRO2.0-Bibliotheken hinzu, wenn ich einen neuen Webdienst erstelle (Code zuerst WS). Der SOAP-Webdienst ist in meinem Apache Tomcat 6 gut implementiert. Wenn ich jedoch einen komplexen Typ sende, konnte der Client nicht auf die Methoden des gesendeten Objekts im Client zugreifen. Sagen wir, ich habe eine Klasse Person und eine Operation genannt:Machen Sie die Methoden eines über SOAP gesendeten Objekts sichtbar
@WebMethod(operationName = "getOnePerson")
public Person getOnePerson() {
return new Person("MyName", "MySurname", 24);
}
und die Person Klasse:
public class Person {
private String name, surname;
private int age;
public Person() {
}
public Person(String name, String surname, int age) {
this.name = name;
this.surname = surname;
this.age = age;
}
public int getAge() {
return age;
}
public String getName() {
return name;
}
public String getSurname() {
return surname;
}
}
Wie kann ich den Client kennen die Person Methoden machen? Dank EDIT: Ich habe versucht, meine XSD-Datei zu aktualisieren, indem Pesron Attribute hinzufügen:
<xs:complexType name="person">
<xs:attribute name="name" type="xs:string" />
<xs:attribute name="surname" type="xs:string" />
<xs:attribute name="age" type="xs:int" />
</xs:complexType>
Durch diesen Teil hinzufügen, kennt der Client die Getter & Setter der Klasse Person, aber wenn man versucht, das Programm auszuführen, alle Getter null zurück (Client-Seite):
public class Main {
public static void main(String[] args) {
try {
Person p = getOnePerson();
System.out.println(p);
System.out.println(p.getSurname());
System.out.println(p.getName());
} catch (Exception e) {
e.printStackTrace();
}
}
private static Person getOnePerson() {
com.company.ws.BeanWebService_Service service = new com.company.ws.BeanWebService_Service();
com.company.ws.BeanWebService port = service.getBeanWebServicePort();
return port.getOnePerson();
}
}
Rückkehr: [email protected] null null Könnten Sie mir bitte sagen, warum der Client die verschiedenen Werte des Klassenattributs nicht kennt?
Ich kann die Klassen auf den Client kopieren. Aber kann die JVM den Adressspeicher jedes Attributs auflösen? Tatsächlich erstellt der Client automatisch einen neuen Typ namens com.company.ws.Person, in dem keine Methoden vorhanden sind. Das Erstellen einer anderen Klasse mit demselben Namen kann daher zu Problemen führen. Ist es nicht? –