2013-08-22 4 views
0

Сначала я расскажу вам о ситуации. Я не буду перечислять каждый класс моего проекта, только те, которые, по моему мнению, актуальны. Если вы чувствуете, что что-то не хватает, сообщите мне, и я добавлю.Почему 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, но я понятия не имею, как это исправить.

Любая помощь очень ценится. Извините за грамматические ошибки.

ответ

1

Проблема может быть одной из двух вещей - (A), что WSDL, созданный с вашей первой веб-службы Java, не захватывает все нужные поля или (B), что последующий wsdl-to-java wsimport процесс не правильно считывает WSDL. Вы определили, что это, глядя на WSDL? Если это A, вы должны показать нам сгенерированный WSDL и спросить, почему отсутствуют важные поля (и не показывать нам артефакты, впоследствии созданные WSDL), что больше не имеет значения, поскольку проблема не существует) Если это B, показать нам WSDL и забудьте о том, что вы сделали для его создания, а затем спросите, почему поля отсутствуют во время процесса wsimport. Не предоставляя WSDL, мы не можем легко определить, находится ли проблема в (A) или (B). Примечание articles 2 and 3 в моем блоге может помочь вам.

+0

Теперь он генерируется правильно. Оказывается, это проблема с геттерами и сеттерами ... Я имею в виду, у меня был метод под названием 'canRemove()'. Просто переименовать его в 'isCanRemove()' или даже 'getCanRemove()' сделал трюк. Что мне кажется странным, так это то, что у меня есть геттер и сеттер для поля пароля из класса пользователя. Однако у установщика есть дополнительные операции, это не просто 'this.password = value'. Я прочитаю статьи, просто подумал, что стоит упомянуть об этом. –

Смежные вопросы