首先,我会概述一下情况。我不会列出我项目的每一个类别,只列出我认为相关的项目。如果你觉得缺少某些东西,请告诉我,我会补充一下。
2个项目:
WS
Client
5个类(它们属于WS):
Main.java
User.java
ModuleMain
ModuleSecondary.java
ModuleEmergency.java
User类包含以下字段:
String username
String password
ModuleMain main
ModuleSecondary secondary
ModuleEmergency emergency
每个“Module”类都有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,但我不知道如何解决这个问题。
非常感谢任何帮助。抱歉语法错误。
答案 0 :(得分:1)
问题可能是两件事之一 - (A)从Java优先Web服务生成的WSDL没有捕获所有需要的字段,或者(B)后续的wsdl-to-java wsimport进程没有正确读取WSDL。您是否通过查看WSDL确定了它是什么?如果它是A,你应该向我们展示生成的WSDL,并询问为什么缺少重要的字段(而不是向我们展示随后由WSDL生成的工件 - 不再重要,因为问题不存在)如果它是B,则显示我们使用WSDL并忘记你为生成它做了什么,然后询问为什么在wsimport进程中缺少字段。通过不提供WSDL,我们无法轻易确定问题是在(A)还是(B)中。注意我博客上的articles 2 and 3可能会对您有所帮助。