gpt4 book ai didi

java - wsgen:返回一个抽象类

转载 作者:行者123 更新时间:2023-12-04 05:57:58 27 4
gpt4 key购买 nike

我写了一个抽象类

import javax.xml.bind.annotation.*;
public abstract class Parent
{
@XmlAttribute(name = "one")
public String getOne() { return "one";}
}

和两个派生类:
import javax.xml.bind.annotation.*;
@XmlRootElement(name="child1")
public class Child1 extends Parent
{
@XmlAttribute(name = "two")
public String getTwo() { return "2";}
}



import javax.xml.bind.annotation.*;
@XmlRootElement(name="child2")
public class Child2 extends Parent
{
@XmlAttribute(name = "three")
public String getThree() { return "3";}
}

和一个@webservice:
import javax.xml.ws.Endpoint;
import javax.jws.*;
import java.util.*;

@WebService(serviceName="MyServerService", name="MyServer")
public class MyServer
{
private int count=0;
@WebResult(name="test")
@WebMethod
public Parent getOne() { return ++count%2==0?new Child1():new Child2();}

public static void main(String[] args) {

Endpoint.publish(
"http://localhost:8080/path",
new MyServer());

}
}

当使用 生成代码时wsgen ,生成的 XML 模式只包含抽象类 的定义。家长 但不适用于 Child1 Child2 .有没有办法告诉 wsgen 生成两个具体类的定义?

谢谢,

最佳答案

添加注释 @XmlSeeAlso应该做的伎俩:

@XmlSeeAlso({Child1.class, Child2.class})
public abstract class Parent {
@XmlAttribute(name = "one")
public String getOne() {
return "one";
}
}

如果您不想让父类知道其子类,您也可以将该注释放在 WS 级别上:
@WebService(serviceName="MyServerService", name="MyServer")
@XmlSeeAlso({Child1.class, Child2.class})
public class MyServer {
private int count=0;

@WebResult(name="test")
@WebMethod
public Parent getOne() {
return ++count%2==0?new Child1():new Child2();
}

public static void main(String[] args) {
Endpoint.publish("http://localhost:8080/path", new MyServer());
}
}

您可以找到有关此行为的有趣信息 here

关于java - wsgen:返回一个抽象类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9283755/

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