JAVA web services命名空間修改方法詳解
在開發(fā)JAVA web services時(shí),經(jīng)常會(huì)涉及到命名空間的問題。如果不統(tǒng)一使用命名空間或者與其他系統(tǒng)提供的webservice服務(wù)不一致,就會(huì)出現(xiàn)各種錯(cuò)誤。本文將介紹如何修改JAVA web
在開發(fā)JAVA web services時(shí),經(jīng)常會(huì)涉及到命名空間的問題。如果不統(tǒng)一使用命名空間或者與其他系統(tǒng)提供的webservice服務(wù)不一致,就會(huì)出現(xiàn)各種錯(cuò)誤。本文將介紹如何修改JAVA web services的命名空間。
統(tǒng)一使用命名空間
為了保證系統(tǒng)內(nèi)部服務(wù)的一致性,我們需要統(tǒng)一使用命名空間。我們可以在web.xml中配置全局的命名空間,這樣在所有的webservice服務(wù)中都會(huì)自動(dòng)添加該命名空間。具體配置如下:
全系統(tǒng)統(tǒng)一使用的命名空間
```xml
```
其他系統(tǒng)提供的webservice服務(wù)
如果你需要調(diào)用其他系統(tǒng)提供的webservice服務(wù),但是其命名空間與你的系統(tǒng)不一致,我們需要修改該服務(wù)的命名空間。具體方法如下:
其他系統(tǒng)提供的webservice服務(wù)
1. 打開WSDL文件,查找該服務(wù)的命名空間。
2. 在你的客戶端代碼中創(chuàng)建一個(gè)新的命名空間,并將其指定為原始命名空間的前綴。
3. 將請求類和返回類的命名空間替換成新的命名空間。
Stub類中的命名空間設(shè)置
在Stub類中,我們可以通過以下方式設(shè)置請求類的命名空間:
Stub類中有webservice服務(wù)的調(diào)用方法
```java
BindingProvider bp (BindingProvider)port;
().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, url);
().put(_MTOM_REQUEST, true);
().put(_MTOM_THRESHOLD, 10000);
Map
map.put(JAXBContext.JAXB_ENCODING, "UTF-8");
map.put(_PROPERTY, username);
map.put(_PROPERTY, password);
((StubExt) port).setOutboundHeaders(
(new QName("", "token"), token));
((Binding) port).getRequestContext().put(_PROPERTY, username);
((Binding) port).getRequestContext().put(_PROPERTY, password);
```
從最初的客戶端代碼看,請求類的命名空間為UPB,我們需要將其修改為全局命名空間:
請求類命名空間修改
```java
@WebServiceClient(name "Service", targetNamespace "", wsdlLocation "")
public class Service extends ServiceImpl {
}
```
最初的返回類命名空間也為UPB,同樣需要修改:
返回類命名空間修改
```java
@XmlAccessorType()
@XmlType(name "", propOrder {...})
@XmlRootElement(name "Response", namespace "")
public class Response
implements Serializable {
}
```
Factory命名空間校驗(yàn)
Factory會(huì)進(jìn)行命名空間的校驗(yàn)及字段的校驗(yàn),所以我們需要在Factory中進(jìn)行相應(yīng)的修改:
Factory命名空間校驗(yàn)
```java
public static Service create(String endpointURL, QName serviceName, String username, String password) throws MalformedURLException {
URL wsdlURL ("");
if (wsdlURL null) {
throw new WebServiceException("Can't find WSDL!");
}
ServiceImpl ss new ServiceImpl(wsdlURL, serviceName);
(new CustomHandlerResolver(username, password));
return ();
}
```
以上就是Java Web Services命名空間修改的詳細(xì)步驟。注意,在修改命名空間時(shí)需要謹(jǐn)慎操作,以免影響系統(tǒng)的穩(wěn)定性。