lea*_*ner 5 java eclipse soap web-services
我是 Java Web 服务的新手,目前我正在尝试创建一个简单的基于 SOAP 的 Web 服务,但在创建它时遇到了问题。
这是我的网络服务类:
@WebService
public class Teams {
private TeamsUtility utils;
public Teams() {
utils = new TeamsUtility();
utils.make_test_teams();
}
@WebMethod
public Team getTeam(String name) { return utils.getTeam(name); }
@WebMethod
public List<Team> getTeams() { return utils.getTeams(); }
@WebMethod
public String getDummyTeams() { return "Hi"; }
}
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,我这里有 3 种方法。现在,如果我只是保留getDummyTeams并要求 eclipse 创建一个 WebService,那么我就没有问题了。但是当我尝试添加剩余的 2 个方法public Team getTeam(String name)然后public List<Team> getTeams()在创建 Web 服务时我收到错误:
服务类“helloservice.endpoint.Teams”不符合 JAX-RPC 1.1 规范的一项或多项要求,并且可能无法正确部署或运行。通过服务类“helloservice.endpoint.Teams”使用的值类型“helloservice.endpoint.Team”上的字段或属性“players”具有 JAX 不支持的数据类型“java.util.List” -RPC 1.1 规范。该类型的实例可能无法正确序列化或反序列化。可能会导致数据丢失或 Web 服务完全失败。
这是我的Team课程:
@XmlRootElement
public class Team implements Serializable{
private List<Player> players;
private String name;
public Team() {
}
public Team(String name, List<Player> players) {
setName(name);
setPlayers(players);
}
// Setter & Getter methods
}
Run Code Online (Sandbox Code Playgroud)
您能帮我解决这个问题吗?我想用java.util.List. 在创建基于 SOAP 的 Web 服务时,是否需要在 Eclipse 中更改任何设置才能使用集合?
这不是对问题的直接回答。但尽管如此,我还是想指出,您可能会考虑根本不使用 JAX-RPC。
首先,JAX-RPC是一个旧的API,它已被JAX-WS取代。
您可能希望继续使用 JAX-RPC 1.1 的原因:...如果您想发送 SOAP 编码消息或创建 RPC/编码样式 WSDL。
这引出了我们的问题“什么是RPC 编码的WSDL 样式?”
WSDL 文件包含 Web 服务方法的定义。有 4 种方式/样式来定义这些方法:
每种风格都有优点和缺点。最重要的是以下评论:
尽管 RPC/encoded 是合法的 WSDL,但它不符合 WS-I。
WS-I 代表“Web 服务互操作性”。因此,正如引用所阐明的,即使 JAX-RPC 支持 RPC/编码的 WSDL 文件,但这并不意味着它与其他 RPC/编码技术(例如用 PHP 编写的 Web 服务)兼容。Java 和 PHP 之间的 JAX-RPC Web 服务一开始似乎可以工作,但有时会在特定情况下中断。所以教训是:避免使用 RPC/编码的 WSDL 文件。这正是 JAX-WS 不支持它们的原因。
不幸的是,有时您别无选择(例如,另一家公司提供 Web 服务)。如果它是 RPC/编码的 WSDL 文件,那么您将无法使用 JAX-WS。如果托管的 Web 服务也是用 Java 编写的,那么您可能会冒险使用 JAX-RPC。如果它是用其他语言编写的,那么我就不会冒险。发生这种情况时,您最好编写自定义处理程序。(您仍然可以安全地使用 JAXB(Java Xml 绑定)通过注释执行(取消)编组(从/到 xml 的转换),就像使用 JAX-WS Web 服务一样。)
但是您如何知道它是否是 RPC/编码的 WSDL 文件呢?您只需在文本编辑器中打开它,然后查找绑定标签。以下示例是 RPC/文字样式 WSDL 文件。因此您可以将 JAX-WS 与此 Web 服务结合使用。
<binding name="MyService" type="tns:MyService">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="rpc"/>
<operation name="method">
<soap:operation soapAction=""/>
<input>
<soap:body use="literal" .../>
</input>
<output>
<soap:body use="literal" .../>
</output>
</operation>
</binding>
Run Code Online (Sandbox Code Playgroud)
当您定义自己的Web服务时,您可以通过使用@SOAPBinding(style=Style.RPC, use=Use.LITERAL).
混乱的根源: JAX-RPC 和 JAX-WS 都使用 SOAP。还有一种叫做XML-RPC旧标准(在 SOAP 之前)的东西。但 JAX-RPC 不使用XML-RPC. 另一方面,SOAP 有时也称为“基于XML 的RPC”。
| 归档时间: |
|
| 查看次数: |
14432 次 |
| 最近记录: |