如何從axis中刪除mustunderstand屬性soap.even我沒有特別設置它,當我設置soap頭信息mustundertand和actor屬性被自動添加到soap消息中。是否有人知道如何刪除它們? 我正在使用Axis2 1.4版本的wsdl2java來創建我的ws客戶端。從肥皂頭中刪除mustUnderstand屬性
回答
1)您是否使用Axis SOAPHeaderElement,如果是,您是否將mustUnderstand設置爲false?
2)由於您使用wsdl2java生成客戶端,因此WSDL(或更準確地說,模式)很可能包含SOAP綁定中引用的元素的mustUnderstand屬性。所以當wsdlToJava生成客戶端代碼時,這些屬性自然會被添加。有關mustUnderstand屬性的描述,請參閱here。 如果修改WSDL不可行,並且您必須從頭中刪除此屬性,那麼我想您可以嘗試使用處理程序執行此操作。
3)不可取,但是如果您確實必須刪除此屬性那麼我想你可以添加改變了報頭中的客戶端處理程序:http://ws.apache.org/axis/java/apiDocs/org/apache/axis/handlers/package-summary.html
如果您希望禁用必須瞭解您在你 到下面的行添加到您的代碼AXIS客戶端:
_call.setProperty(Call.CHECK_MUST_UNDERSTAND, new Boolean(false));
然後MustUnd不會調用AXIS客戶端的erstandChecker。
我在我的情況下,使用軸1.4客戶端WS安全
爲萊因哈德說 這個工作
MyService service = new MyServiceLocator();
MyServicePortType port = service.getMyServiceHttpsSoap11Endpoint();
((Stub) port)._setProperty(Call.CHECK_MUST_UNDERSTAND, Boolean.FALSE);
我最近有類似的情況掙扎,做一些谷歌-ING我設法找到以下解決方案。
使用Axis2後,您可能會生成一個MyWSStub文件,其中包含對您的服務的調用。 創建一個可擴展存根的包裝類(最好不要觸及自動生成的存根文件),例如MyWSStubWrapper:
public class MyWSStubWrapper extends MyWSStub {
/**
* @throws AxisFault
*/
public MyWSStubWrapper() throws AxisFault {
}
/**
* @param configurationContext
* @throws AxisFault
*/
public MyWSStubWrapper(ConfigurationContext configurationContext) throws AxisFault {
super(configurationContext);
}
/**
* @param targetEndpoint
* @throws AxisFault
*/
public MyWSStubWrapper(String targetEndpoint) throws AxisFault {
super(targetEndpoint);
}
/**
* @param configurationContext
* @param targetEndpoint
* @throws AxisFault
*/
public MyWSStubWrapper(ConfigurationContext configurationContext, String targetEndpoint) throws AxisFault {
super(configurationContext, targetEndpoint);
}
/**
* @param configurationContext
* @param targetEndpoint
* @param useSeparateListener
* @throws AxisFault
*/
public MyWSStubWrapper(ConfigurationContext configurationContext, String targetEndpoint, boolean useSeparateListener) throws AxisFault {
super(configurationContext, targetEndpoint, useSeparateListener);
}
@Override
protected void addHeader(OMElement omElementToadd, SOAPEnvelope envelop, boolean mustUnderstand) {
SOAPHeaderBlock soapHeaderBlock = envelop.getHeader().addHeaderBlock(omElementToadd.getLocalName(), omElementToadd.getNamespace());
OMNode omNode = null;
// add child elements
for (Iterator iter = omElementToadd.getChildren(); iter.hasNext();) {
omNode = (OMNode) iter.next();
iter.remove();
soapHeaderBlock.addChild(omNode);
}
OMAttribute omatribute = null;
// add attributes
for (Iterator iter = omElementToadd.getAllAttributes(); iter.hasNext();) {
omatribute = (OMAttribute) iter.next();
soapHeaderBlock.addAttribute(omatribute);
}
}
}
記住,上面的代碼將完全刪除soapenv熊:mustUnderstand屬性=「0 | 1」從你的頭,如果你想添加你需要調用soapHeaderBlock.setMustUnderstand(真|假);在你的代碼中的某處。
沒有這些解決方案的工作對我來說,如:
- 我與軸(未Axis2的)工作
- 我不想在所有被指定的屬性,因爲我的服務器副本沒有按不支持它(「'http://schemas.xmlsoap.org/soap/envelope/:mustUnderstand'屬性沒有聲明」在這種情況下是典型的答案)。
望着回答「Adding ws-security to wsdl2java generated classes」幫我寫爲我工作的解決方案:
void addSecurityHeader(Stub stub, final String username, final String password) {
QName headerName = new QName("http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd", "Security"); // Or any other namespace that fits in your case
AtomicReference<SOAPHeaderElement> header
= new AtomicReference<SOAPHeaderElement>
(new SOAPHeaderElement(headerName) {
{
SOAPElement utElem = addChildElement("UsernameToken");
utElem.addChildElement("Username").setValue(username);
utElem.addChildElement("Password").setValue(password);
}
@Override
public void setAttribute(String namespace, String localName, String value) {
if (!Constants.ATTR_MUST_UNDERSTAND.equals(localName)) { // Or any other attribute name you'd want to avoid
super.setAttribute(namespace, localName, value);
}
}
});
SOAPHeaderElement soapHeaderElement = header.get();
soapHeaderElement.setActor(null); // No intermediate actors are involved.
stub.setHeader(soapHeaderElement); // Finally, attach the header to the stub
}
對我來說,它的工作手動從的SOAPHeader
SOAPHeader header = env.getHeader();
OMChildrenQNameIterator childrenWithName = (OMChildrenQNameIterator) header.getChildrenWithName(omElementauthentication.getQName());
while (childrenWithName.hasNext()) {
org.apache.axiom.om.OMElement omElement = (org.apache.axiom.om.OMElement) childrenWithName.next();
QName mustAnderstandQName = omElement.resolveQName("soapenv:mustUnderstand");
if (mustAnderstandQName == null) {
continue;
}
OMAttribute mustAnderstandAttribute = omElement.getAttribute(mustAnderstandQName);
if (mustAnderstandAttribute == null) {
continue;
}
omElement.removeAttribute(mustAnderstandAttribute);
}
刪除屬性
- 1. 使用IClientMessageInspector從WCF肥皂請求中刪除操作節點mustUnderstand
- 2. 肥皂頭從BizTalk
- 3. 新手IPhone刪除肥皂信封
- 4. 「理解」標籤爲「mustunderstand」的肥皂標題意味着什麼
- 5. 從肥皂反應中刪除<return>元素 - JaxWs
- 6. 從WSO2代理中刪除肥皂信封
- 7. 從肥皂響應中檢索屬性值
- 8. 如何從肥皂
- 9. 肥皂從Node.js的
- 10. 騾子肥皂代理流程刪除/刪除XML聲明
- 11. 肥皂webservice上的PCI遵從性
- 12. 共存肥皂1.1和肥皂1.2
- 13. 肥皂肥皂數字簽名
- 14. PHP的肥皂頭SETENV正確
- 15. 如何設置這個PHP肥皂頭?
- 16. 修改SOAP頭WCF客戶端中的Mustunderstand屬性
- 17. 如何從Symfony 2.0中讀取肥皂WSSE頭文件
- 18. 從XMLBean中刪除屬性
- 19. 用肥皂水
- 20. 肥皂內WebRequest
- 21. BeSimple肥皂庫
- 22. $ {}東西肥皂
- 23. Broadsoft在肥皂
- 24. 如何從Spring Web服務中刪除肥皂消息中的body元素
- 25. 從android中調用肥皂web服務
- 26. 如何接受SOAP頭部分的mustUnderstand和其他屬性?
- 27. 肥皂XML解析Android中
- 28. 在肥皂中轉義html
- 29. Zend的肥皂WIN7 /阿帕奇着刪除緩存
- 30. c#肥皂和logmein
1)是的我正在使用SOAPHeaderElement,但我試着用不設置mustunderstand並將它設置爲false.nothing實際上沒有改變。我的代碼是這樣的:\t SOAPHeaderElement header = new SOAPHeaderElement( \t \t「ns1://x.x.x.x/abc.asmx」,「AuthHeader」); \t \t SOAPElement node = header.addChildElement(「user_1」); \t \t node.addTextNode(「abc」); \t \t SOAPElement node2 = header.addChildElement(「pass_1」); \t \t node2.addTextNode(「123」); \t \t _call.addHeader(header); – cacert
當你說什麼都沒有改變時,你的意思是說SOAP頭始終顯示爲mustUnderstand = false?你有WSSDL /架構你可以發佈(不要發佈整個事情,如果它很長......只是相關的部分)。 –
是的,我的意思是完全that.i認爲軸代碼添加mustunderstand和演員屬性默認行爲時,肥皂頭參數設置。當我刪除肥皂頭代碼比mustunderstand和演員參數也刪除。 – cacert