Сначала я расскажу вам о ситуации. Я не буду перечислять каждый класс моего проекта, только те, которые, по моему мнению, актуальны. Если вы чувствуете, что что-то не хватает, сообщите мне, и я добавлю.Почему wsimport генерирует «неполные» классы?
2 Проекты:
WS
Client
5 классов (они принадлежат к WS):
Main.java
User.java
ModuleMain
ModuleSecondary.java
ModuleEmergency.java
Класс Пользователь имеет следующие поля:
String username
String password
ModuleMain main
ModuleSecondary secondary
ModuleEmergency emergency
Каждый класс "Модуль" имеет 3 логических полей, которые являются разрешения на доступ к модулю. они:
boolean canMonitor
boolean canAdd
boolean canRemove
Это класс WS. Этот класс является тот, который публикует конечную точку:
Endpoint endpoint = Endpoint.create(new UserWs());
//UserWs would be a WebService.
SSLContext ssl = SSLContext.getInstance("SSLv3");
TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
KeyStore jks = KeyStore.getInstance("PKCS12");
jks.load(new FileInputStream(path), pwField.getText().toCharArray());
kmf.init(jks, pwField.getText().toCharArray());
KeyManager[] keyManagers = kmf.getKeyManagers();
tmf.init(jks);
TrustManager[] trustManagers = tmf.getTrustManagers();
ssl.init(keyManagers, trustManagers, new SecureRandom());
HttpsConfigurator configurator = new HttpsConfigurator(ssl);
server = HttpsServer.create(new InetSocketAddress("localhost", 443), 443);
server.setHttpsConfigurator(configurator);
HttpContext context = server.createContext("/ws");
server.start();
endpoint.publish(context);
После я бегу WebService, я использую инструмент wsimport, чтобы получить классы в проект Client
.
wsimport -verbose -Xdebug -keep -p ws.api https://localhost:443/ws?wsdl
Таковы некоторые из классов, которые я получаю:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "user", propOrder = {
"moduleMain",
"moduleSecondary",
"moduleEmergency",
"sessionKey",
"username"
})
public class User {
protected ModuleMain main;
protected ModuleSecondary secondary;
protected ModuleEmergency emergency;
protected String username;
//...getters and setters for those fields...//
}
Как вы можете видеть, поле пароля кончили.Но это действительно не проблема, проблема в сгенерированные Module
классы:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "main")
public class ModuleMain {
}
И это все. Другие классы Module
- это одно и то же. У них нет никаких методов, поэтому у меня нет доступа к полям разрешений. Я не могу понять, в чем проблема, возможно, это WSDL, но я понятия не имею, как это исправить.
Любая помощь очень ценится. Извините за грамматические ошибки.
Теперь он генерируется правильно. Оказывается, это проблема с геттерами и сеттерами ... Я имею в виду, у меня был метод под названием 'canRemove()'. Просто переименовать его в 'isCanRemove()' или даже 'getCanRemove()' сделал трюк. Что мне кажется странным, так это то, что у меня есть геттер и сеттер для поля пароля из класса пользователя. Однако у установщика есть дополнительные операции, это не просто 'this.password = value'. Я прочитаю статьи, просто подумал, что стоит упомянуть об этом. –