gpt4 book ai didi

java - Web服务命名空间共享

转载 作者:行者123 更新时间:2023-12-01 13:11:55 25 4
gpt4 key购买 nike

我创建了一组 3 个 Java JAX-WS Web 服务,每个服务都生成自己的 WSDL 文件,但它们都包含在同一个项目和 Web 应用程序中。

它们共享许多相同的请求/响应对象。例如,所有请求和响应对象都继承自 BaseRequest 和 BaseResponse 类。

当我使用 C# .NET 创建客户端时,它会创建多个 BaseRequest 和 BaseResponse 类,每个 WSDL 文件一个,但我真正希望它做的只是创建一组共享的 BaseRequest 和 BaseResponse 类。

如果我让所有单独的 Web 服务共享相同的目标命名空间,我似乎可以完成此任务。我的问题是,这样做是否可以接受且合适(在生成不同 WSDL 文件的多个 Web 服务之间共享相同的命名空间)?

下面是一些示例 Java 代码,以便您可以大致了解我的 Web 服务的外观:

@WebService(name = "BasicServicePortType", targetNamespace = "http://com.vectren.ws.basic.impl")
public interface BasicService
{
@ResponseWrapper(localName = "LogInResponseWrapper")
public LogInResponse logIn(@WebParam(name="request")LogInRequest request);

@ResponseWrapper(localName = "LogOutResponseWrapper")
public LogOutResponse logOut(@WebParam(name="request")LogOutRequest request);
}


@WebService(name = "ContentServicePortType", targetNamespace = "http://com.vectren.ws.content.impl")
public interface ContentService
{
@ResponseWrapper(localName = "GetContentResponseWrapper")
public GetContentResponse getContentList(@WebParam(name="request")GetContentRequest request);
}

@WebService(name = "OutageServicePortType", targetNamespace = "http://com.vectren.ws.outage.impl")
public interface OutageService
{
@ResponseWrapper(localName = "GetOutageNumbersResponseWrapper")
public GetOutageNumbersResponse getOutageNumbers(@WebParam(name="request")GetOutageNumbersRequest request);

@ResponseWrapper(localName = "GetOutageableAccountsByAccountNumbersResponseWrapper")
public GetOutageableAccountsResponse getOutageableAccountsByAccountNumbers(@WebParam(name="request")GetOutageableAccountsByAccountNumbersRequest request);
}

注意:在每种情况下,请求/响应对象都继承自相同的“BaseRequest”/“BaseResponse”类。例如,LogInRequest、LogOutRequest、GetContentRequest、GetOutageNumbersRequest 和 GetOutageableAccountsByAccountNumbersRequest全部继承自BaseRequest。响应对象的想法相同。

最佳答案

但是我认为您真正想要的是类型的命名空间相同。服务的命名空间实际上并不那么重要。只要类型具有公共(public) namespace ,您就可以实现某种程度的通用性。

我不能代表 .NET,但在 Java 世界中,三个独立 WSDL 的 wsimport 将生成三组代码。但是,如果这些类型位于跨 WSDL/模式的公共(public)命名空间中,则这三次中的两次会生成相同的代码。如果从三个 WSDL 生成到同一个客户端项目(jar、war 等)中,则会导致代码的公共(public)位被覆盖两次。

在公共(public)类中,您可以将它们注释为具有特定的 xml 命名空间。如果我记得的话,不这样做会导致它们在生成的 WSDL 关联的 XSD 内的服务命名空间中声明。

package com.example.services.base;

@XmlRootElement
@XmlType(namespace="http://services.example.com/base")
public class BaseRequest {
//...
}

关于java - Web服务命名空间共享,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22789966/

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