gpt4 book ai didi

java - 为什么 wsimport 生成 "incomplete"类?

转载 作者:行者123 更新时间:2023-12-01 14:12:48 26 4
gpt4 key购买 nike

首先我向您介绍一下情况。我不会列出项目的每个类,只会列出我认为相关的类。如果您觉得缺少什么,请告诉我,我会添加。

2 个项目:

WS

客户端

5 个类(它们属于 WS):

Main.java

User.java

ModuleMain

ModuleSecondary.java

ModuleEmergency.java

User 类具有以下字段:

字符串用户名

字符串密码

ModuleMain 主

ModuleSecondary 次要

ModuleEmergency 紧急情况

每个“模块”类都有 3 个 boolean 字段,它们是访问模块的权限。他们是:

boolean canMonitor

boolean 值canAdd

boolean 值可以删除

这是 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

这些是我得到的一些类(class):

@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,但我不知道如何解决这个问题。

非常感谢任何帮助。抱歉出现语法错误。

最佳答案

问题可能是由以下两种情况之一造成的 - (A) 从 Java-first Web 服务生成的 WSDL 未捕获所有所需的字段,或者 (B) 后续的 wsdl-to-java wsimport 过程未正确读取 WSDL。您是否通过查看 WSDL 确定了它是什么?如果是 A,您应该向我们展示生成的 WSDL 并询问为什么缺少重要字段(而不是向我们展示 WSDL 随后生成的工件——这不再重要,因为问题不存在)如果是 B,则显示我们使用 WSDL,忘记生成它的操作,然后询问为什么在 wsimport 过程中缺少字段。由于不提供 WSDL,我们无法轻松确定问题是在 (A) 还是 (B) 中。注articles 2 and 3我的博客上的内容可能对您有帮助。

关于java - 为什么 wsimport 生成 "incomplete"类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18371858/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com