gpt4 book ai didi

java - NetBeans web 服务客户端 stub - 类型不兼容?

转载 作者:行者123 更新时间:2023-11-30 06:35:28 25 4
gpt4 key购买 nike

我为 NetBeans 网络服务生成了客户端 stub 。

Web 服务实现使用我项目中的本地 POJO。生成的 stub 已创建此 POJO 的修订版以供使用。当我使用该服务时,我想使用原始的 POJO,而不是生成的类型..?类型转换不起作用。

即(注意包裹)

package adiib.ws.harmoniser;

@WebMethod(operationName = "getStartupLogMessages")
public ArrayList<LogMessage> getStartupLogMessages() {
return startupLogMessages;
}

POJO LogMessage 读取:

package adiib.shared;

public class LogMessage implements Serializable
{
private static final long serialVersionUID = 8379681391654158512L;

private String exceptionMessage;
private String customMessage;
private String stackTrace;
private LogMessageEnum classification;
private String effectiveTime;
private String exceptionClassName;
private String throwerClassName;

public LogMessage(){}

public LogMessage(String exceptionMessage, String customMessage,
String stackTrace, LogMessageEnum classification, String effectiveTime,
String exceptionClassName, String throwerClassName)
{
this.exceptionMessage = exceptionMessage;
this.customMessage = customMessage;
this.stackTrace = stackTrace;
this.classification = classification;
this.effectiveTime = effectiveTime;
this.exceptionClassName = exceptionClassName;
this.throwerClassName = throwerClassName;
}

public String getCustomMessage() {
return customMessage;
}

public void setCustomMessage(String customMessage) {
this.customMessage = customMessage;
}

public String getExceptionMessage() {
return exceptionMessage;
}

public void setExceptionMessage(String exceptionMessage) {
this.exceptionMessage = exceptionMessage;
}

public LogMessageEnum getClassification() {
return classification;
}

public void setClassification(LogMessageEnum classification) {
this.classification = classification;
}

public String getEffectiveTime() {
return effectiveTime;
}

public void setEffectiveTime(String effectiveTime) {
this.effectiveTime = effectiveTime;
}

public String getStackTrace() {
return stackTrace;
}

public void setStackTrace(String stackTrace) {
this.stackTrace = stackTrace;
}

public String getExceptionClassName() {
return exceptionClassName;
}

public void setExceptionClassName(String exceptionClassName) {
this.exceptionClassName = exceptionClassName;
}

public String getThrowerClassName() {
return throwerClassName;
}

public void setThrowerClassName(String throwerClassName) {
this.throwerClassName = throwerClassName;
}
}

现在,当我尝试像这样使用 web 服务方法时,在客户端:

package adiib.server;

private void getStartupLogMessages() {

private static List<LogMessage> logMessages = new ArrayList<LogMessage>();

dsto.adiib.ws.client.harmoniser.AdiibHarmoniser_Service service = new dsto.adiib.ws.client.harmoniser.AdiibHarmoniser_Service();
dsto.adiib.ws.client.harmoniser.AdiibHarmoniser port = service.getAdiibHarmoniserPort();

List<dsto.adiib.ws.client.harmoniser.LogMessage> startupLogMessages = port.getStartupLogMessages();
for (adiib.ws.client.harmoniser.LogMessage logMessage : startupLogMessages) {
/*
* this fails becuase it's looking for adiib.ws.client.harmoniser.LogMessage
* not adiib.shared.LogMessage; adiib.ws.client.harmoniser.LogMessage is the
* generated type..
*/
logMessages.add((LogMessage) logMessage);
}
}

有什么想法吗?我所能想到的就是创建一个转换方法……这似乎是错误的。

沃夫加临

最佳答案

该工具生成的类与您拥有的原始类不同。因此,您必须使用客户端生成的工具与 Web 服务进行通信。您不能将其替换为您为服务器端编写的那些。

例如,考虑 JAX-WS 构建的客户端 DTO。如果您打开源代码,您会看到自动生成的代码(使用 wsimport)包含服务器端类中可能不存在的注释(除非您手动编写)。因此,据我了解,您必须使用工具生成的工具。

在调用 Web 服务之前,您可能必须编写方法将 DTO 转换为工具生成的 DTO。如果您生成的类具有相同的属性集(生成客户端 DTO 时工具未更改类型和命名),那么您可能可以使用 Apache Commons BeanUtils(请参阅 http://commons.apache.org/beanutils/)之类的东西来帮助转换。您可以简单地调用 BeanUtils.copyProperties() 并传入源 DTO(您自己的类型)和目标 DTO(生成的 WS)并进行转换。

关于java - NetBeans web 服务客户端 stub - 类型不兼容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6039468/

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