{"id":581,"date":"2013-06-03T17:30:38","date_gmt":"2013-06-03T09:30:38","guid":{"rendered":"http:\/\/www.yeetrack.com\/?p=581"},"modified":"2023-11-23T09:58:01","modified_gmt":"2023-11-23T01:58:01","slug":"apache-cxf%e6%b5%8b%e8%af%95webservice%e6%b7%bb%e5%8a%a0header%e4%bf%a1%e6%81%af","status":"publish","type":"post","link":"https:\/\/www.yeetrack.com\/?p=581","title":{"rendered":"apache-cxf\u6d4b\u8bd5webservice\u6dfb\u52a0header\u4fe1\u606f"},"content":{"rendered":"<p>\u4f7f\u7528apache-cxf\u81ea\u52a8\u751f\u6210webservice\u672c\u5730\u7c7b\uff0c\u6709\u65f6\u9700\u8981\u5728soap\u4e2d\u6dfb\u52a0header\u4fe1\u606f\uff0c\u5982\u4e0b\u9762<\/p>\n<pre><code>&lt;soap:header&gt;\n    &lt;username&gt;youthflies&lt;\/username&gt;\n    &lt;password&gt;youthflies&lt;\/username&gt;\n&lt;\/soap:header&gt;\n<\/code><\/pre>\n<p>\u6211\u4eec\u53ef\u4ee5\u5728\u751f\u6210webservice client\u7684\u65f6\u5019\uff0c\u624b\u52a8\u6dfb\u52a0\u4e0a\u6211\u4eec\u9700\u8981\u7684header\u4fe1\u606f\u3002<!--more--><\/p>\n<p>\u65b0\u5efa\u4e00\u4e2a<code>SoapHeaderInterceptor.java<\/code>\uff0c\u5185\u5bb9\u5982\u4e0b\uff1a<\/p>\n<pre><code>package com.yeetrack.webservice;\n\nimport java.util.List;\n\nimport javax.xml.namespace.QName;\n\nimport org.apache.cxf.binding.soap.SoapHeader;\nimport org.apache.cxf.binding.soap.SoapMessage;\nimport org.apache.cxf.binding.soap.interceptor.AbstractSoapInterceptor;\nimport org.apache.cxf.headers.Header;\nimport org.apache.cxf.helpers.DOMUtils;\nimport org.apache.cxf.interceptor.Fault;\nimport org.apache.cxf.phase.Phase;\nimport org.w3c.dom.Document;\nimport org.w3c.dom.Element;\n\n\/**\n * @author youthflies\n * \u81ea\u5b9a\u4e49\u7684soap\u62e6\u622a\u5668\uff0c\u7528\u6765\u6dfb\u52a0header\u4fe1\u606f\n *\/\npublic class SoapHeaderInterceptor extends AbstractSoapInterceptor\n{\n    public SoapHeaderInterceptor()\n    {\n        super(Phase.WRITE);\n    }\n\n    @Override\n    public void handleMessage(SoapMessage message) throws Fault\n    {\n        \/\/ TODO Auto-generated method stub   \n        List headers=message.getHeaders(); \n        headers.add(getHeader(\"username\", \"youthflies\"));\n        headers.add(getHeader(\"password\", \"youthflies\"));\n    }\n\n    \/\/http:\/\/webservice.webxml.com.cn\/WebServices\/MobileCodeWS.asmx?wsdl\n    private Header getHeader(String key, String value) \n    { \n        QName qName=new QName(\"http:\/\/webservice.webxml.com.cn\/\", key); \n\n        Document document=DOMUtils.createDocument(); \n        Element element=document.createElementNS(\"http:\/\/webservice.webxml.com.cn\/\", key); \n        element.setTextContent(value); \n\n        SoapHeader header=new SoapHeader(qName, element); \n        return(header); \n    }\n\n}\n<\/code><\/pre>\n<p>\u518d\u7ed9\u4e2a\u6709\u5b50\u8282\u70b9\u7684header\u4f8b\u5b50\uff1a<\/p>\n<pre><code>public void handleMessage(SoapMessage arg0) throws Fault \n{\n    QName qName=new QName(\"http:\/\/yourdomain.com\/\");    \n    Document doc = DOMUtils.createDocument();  \n    Element root = doc.createElement(\"AuthenticationToken\");  \n\n    Element username = doc.createElement(\"username\");  \n    username.setTextContent(\"yeetrack.com\");  \n\n    Element password = doc.createElement(\"password\");  \n    password.setTextContent(\"yeetrack.com\");  \n\n    Element args = doc.createElement(\"someargs\");  \n    args.setTextContent(\"\u5176\u4ed6\u53c2\u6570\");  \n\n    root.appendChild(username);  \n    root.appendChild(password);  \n    root.appendChild(args);  \n    SoapHeader header = new SoapHeader(qName, root);\n        \/\/ \u83b7\u53d6SOAP\u6d88\u606f\u7684\u5168\u90e8\u5934  \n    List&lt;Header&gt; headers = arg0.getHeaders();  \n    headers.add(header);    \n}\n<\/code><\/pre>\n<p>\u7136\u540e\uff0c\u518d\u6211\u4eec\u7684\u6d4b\u8bd5case\u4e2d\uff0c\u6dfb\u52a0\u62e6\u622a\u5668\uff1a<\/p>\n<pre><code>    \/\/\u5b9e\u4f8b\u5316\u63a5\u53e3\u5b9e\u73b0\u7c7b\n   MobileCodeWS mobileCodeWS = new MobileCodeWS();\n   \/\/\u5b9e\u4f8b\u5316\u63a5\u53e3\n   MobileCodeWSSoap mobileCodeWSSoap = mobileCodeWS.getMobileCodeWSSoap();\n\n   Client client = ClientProxy.getClient(mobileCodeWSSoap);\n   client.getOutInterceptors().add(new SoapHeaderInterceptor());\n\n   \/\/\u8c03\u7528\u63a5\u53e3\u4e2d\u7684\u65b9\u6cd5\n   System.out.println(mobileCodeWSSoap.getMobileCodeInfo(\"13898767654\", \"\"));\n<\/code><\/pre>\n<p>\u4f9d\u8d56\u7684jar\u5305\uff1a<\/p>\n<pre><code>&lt;dependency&gt;\n    &lt;groupId&gt;org.apache.cxf&lt;\/groupId&gt;\n    &lt;artifactId&gt;cxf-rt-frontend-jaxws&lt;\/artifactId&gt;\n    &lt;version&gt;2.7.4&lt;\/version&gt;\n&lt;\/dependency&gt;\n&lt;dependency&gt;\n    &lt;groupId&gt;org.apache.cxf&lt;\/groupId&gt;\n    &lt;artifactId&gt;cxf-rt-bindings-soap&lt;\/artifactId&gt;\n    &lt;version&gt;2.7.4&lt;\/version&gt;\n&lt;\/dependency&gt;\n&lt;dependency&gt;\n    &lt;groupId&gt;org.apache.cxf&lt;\/groupId&gt;\n    &lt;artifactId&gt;cxf-rt-transports-http&lt;\/artifactId&gt;\n    &lt;version&gt;2.7.4&lt;\/version&gt;\n&lt;\/dependency&gt;\n&lt;dependency&gt;\n&lt;groupId&gt;org.apache.ws.security&lt;\/groupId&gt;\n    &lt;artifactId&gt;wss4j&lt;\/artifactId&gt;\n    &lt;version&gt;1.6.10&lt;\/version&gt;\n&lt;\/dependency&gt;\n&lt;dependency&gt;\n    &lt;groupId&gt;org.apache.cxf&lt;\/groupId&gt;\n    &lt;artifactId&gt;cxf-rt-ws-security&lt;\/artifactId&gt;\n    &lt;version&gt;2.7.5&lt;\/version&gt;\n&lt;\/dependency&gt;<\/code><\/pre>\n<p>\u6548\u679c\u5982wireshark\u6293\u5305\uff1a<br \/>\n<a href=\"https:\/\/yeetrack-space.bj.bcebos.com\/blog\/201306\/QQ\u622a\u56fe20130603171528.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-584\" alt=\"wireshark\u6293\u53d6webservice\" src=\"https:\/\/yeetrack-space.bj.bcebos.com\/blog\/201306\/QQ\u622a\u56fe20130603171528.jpg\" width=\"606\" height=\"389\" \/><\/a><br \/>\n<a title=\"maven cxf-codegen-plugin\u63d2\u4ef6\u6d4b\u8bd5webservice\" href=\"https:\/\/www.yeetrack.com\/?p=528\">maven cxf-codegen-plugin\u63d2\u4ef6\u6d4b\u8bd5webservice<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u4f7f\u7528apache-cxf\u81ea\u52a8\u751f\u6210webservice\u672c\u5730\u7c7b\uff0c\u6709\u65f6\u9700\u8981\u5728soap\u4e2d\u6dfb\u52a0header\u4fe1\u606f\uff0c\u5982\u4e0b\u9762 &lt;soap:header&gt; &lt;username&gt;youthflie&#46;&#46;&#46;<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"pgc_sgb_lightbox_settings":"","footnotes":""},"categories":[33],"tags":[8,7,42,41],"class_list":["post-581","post","type-post","status-publish","format-standard","hentry","category-coding","tag-java","tag-7","tag-42","tag-41"],"views":14149,"_links":{"self":[{"href":"https:\/\/www.yeetrack.com\/index.php?rest_route=\/wp\/v2\/posts\/581","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.yeetrack.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.yeetrack.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.yeetrack.com\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.yeetrack.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=581"}],"version-history":[{"count":6,"href":"https:\/\/www.yeetrack.com\/index.php?rest_route=\/wp\/v2\/posts\/581\/revisions"}],"predecessor-version":[{"id":1522,"href":"https:\/\/www.yeetrack.com\/index.php?rest_route=\/wp\/v2\/posts\/581\/revisions\/1522"}],"wp:attachment":[{"href":"https:\/\/www.yeetrack.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=581"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.yeetrack.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=581"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.yeetrack.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=581"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}