ader
xml :
<soap:Header>
<auth:authentication xmlns:auth="http://gd.chinamobile.com//authentication">
<auth:systemID>1</auth:systemID>
<auth:userID>test</auth:userID>
<auth:password>test</auth:password>
</auth:authentication>
</soap:Header>
, ( ), org.apache.cxf.phase.AbstractPhaseInterceptor
:
import java.util.List;
import javax.xml.soap.SOAPException;
import org.apache.cxf.binding.soap.SoapHeader;
import org.apache.cxf.binding.soap.SoapMessage;
import org.apache.cxf.headers.Header;
import org.apache.cxf.helpers.XMLUtils;
import org.apache.cxf.interceptor.Fault;
import org.apache.cxf.phase.AbstractPhaseInterceptor;
import org.apache.cxf.phase.Phase;
import org.apache.log4j.Logger;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
public class AuthIntercetpr extends AbstractPhaseInterceptor<SoapMessage> {
private static final Logger logger = Logger.getLogger(AuthIntercetpr.class);
public static final String xml_namespaceUR_att = "http://gd.chinamobile.com//authentication";
public static final String xml_header_el = "soap:Header";
public static final String xml_authentication_el = "auth:authentication";
public static final String xml_systemID_el = "auth:systemID";
public static final String xml_userID_el = "auth:userID";
public static final String xml_password_el = "auth:password";
public AuthIntercetpr() {
//
super(Phase.PRE_INVOKE);
}
//
public void handleMessage(SoapMessage message) {
logger.info("==================SoapMessage =" + message);
// SOAP
List<Header> headers = message.getHeaders();
if (null == headers || headers.size() < 1) {
throw new Fault(new SOAPException("SOAP !"));
}
for (Header header : headers) {
SoapHeader soapHeader = (SoapHeader) header;
// SOAP Header
Element element = (Element) soapHeader.getObject();
logger.info("ELEMENT =" + element.toString());
XMLUtils.printDOM(element);
NodeList userIdNodes = element
.getElementsByTagName(xml_userID_el);
NodeList pwdNodes = element
.getElementsByTagName(xml_password_el);
NodeList systemIdNodes = element
.getElementsByTagName(xml_systemID_el);
logger.info("############ ##############");
logger.info(userIdNodes.item(0) + "="
+ userIdNodes.item(0).getTextContent());
logger.info(systemIdNodes.item(0) + "="
+ systemIdNodes.item(0).getTextContent());
logger.info(pwdNodes.item(0) + "="
+ pwdNodes.item(0).getTextContent());
logger.info("############————————##############");
if (null != userIdNodes
&& userIdNodes.item(0).getTextContent().equels("test") ) {
if (null != pwdNodes
&& pwdNodes.item(0).getTextContent().equals("test")) {
logger.info("$$$$$$$$ ");
} else {// ,
SOAPException soapExc = new SOAPException(" !");
throw new Fault(soapExc);
}
} else {// ,
SOAPException soapExc = new SOAPException(" !");
throw new Fault(soapExc);
}
}
}
}
, cxf-beans.xml
<!--id: ,implementor: ,address: , , -->
<!-- -->
<bean id="authIntercetpr" class="unitTest.AuthIntercetpr"></bean>
<jaxws:endpoint id="HelloWorldService" implementor="com.ws.HelloWorldServiceImpl"
address="/IHelloService">
<!-- ws -->
<ref bean="authIntercetpr" />
<!-- <bean class="unitTest.AuthIntercetpr"></bean>-->
</jaxws:endpoint>
!!!
( )
, , org.apache.cxf.binding.soap.interceptor.AbstractSoapInterceptor
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import javax.xml.namespace.QName;
import org.apache.cxf.binding.soap.SoapHeader;
import org.apache.cxf.binding.soap.SoapMessage;
import org.apache.cxf.binding.soap.interceptor.AbstractSoapInterceptor;
import org.apache.cxf.headers.Header;
import org.apache.cxf.helpers.DOMUtils;
import org.apache.cxf.helpers.XMLUtils;
import org.apache.cxf.interceptor.Fault;
import org.apache.cxf.phase.Phase;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
public class AddSoapHeader extends AbstractSoapInterceptor {
public static final String xml_namespaceUR_att = "http://gd.chinamobile.com//authentication";
public static final String xml_header_el = "soap:Header";
public static final String xml_authentication_el = "auth:authentication";
public static final String xml_systemID_el = "auth:systemID";
public static final String xml_userID_el = "auth:userID";
public static final String xml_password_el = "auth:password";
public AddSoapHeader() {
//
super(Phase.WRITE);
}
public void handleMessage(SoapMessage message) throws Fault {
SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = new Date();
String time = sd.format(date);
String userId = "test";
String sysId = "1";
String password = "test";
QName qname = new QName("RequestSOAPHeader");// ,
Document doc = (Document) DOMUtils.createDocument();
Element root = doc.createElement(xml_header_el);
Element eSysId = doc.createElement(xml_systemID_el);
eSysId.setTextContent(sysId);
Element eUserId = doc.createElement(xml_userID_el);
eUserId.setTextContent(userId);
Element ePwd = doc.createElement(xml_password_el);
ePwd.setTextContent(password);
Element child = doc.createElementNS(xml_namespaceUR_att,
xml_authentication_el);
child.appendChild(eSysId);
child.appendChild(eUserId);
child.appendChild(ePwd);
root.appendChild(child);
XMLUtils.printDOM(root);// xml ,
SoapHeader head = new SoapHeader(qname, root);
List<Header> headers = message.getHeaders();
headers.add(head);
}
}
, ws
private static final String webServiceConTimeout = "6000";
private static final String webServiceRevTimeout = "6000";
。。。。。。。
HelloWorldServiceImplService hello = new HelloWorldServiceImplService();
HelloWorldService service = hello.getHelloWorldServiceImplPort();
// :http://learning.iteye.com/admin/blogs/1333223
Client clientProxy = ClientProxy.getClient(service);// ws
// ,getOutInterceptors ,getInInterceptors
clientProxy.getOutInterceptors().add(ash);
//
HTTPConduit http = (HTTPConduit) clientProxy.getConduit();
HTTPClientPolicy httpClientPolicy = new HTTPClientPolicy();
httpClientPolicy.setConnectionTimeout(Integer
.valueOf(webServiceConTimeout));
httpClientPolicy.setReceiveTimeout(Integer
.valueOf(webServiceRevTimeout));
httpClientPolicy.setAllowChunking(false);
http.setClient(httpClientPolicy);
//
// deleteTeskTask()
CallResult cResult = service.deleteTeskTask("1223");
。
。
, JaxWsProxyFactoryBean , ws, :
private static final JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
AddSoapHeader ash = new AddSoapHeader();
ArrayList list = new ArrayList();
// soap header
list.add(ash);
// ,getOutInterceptors ,getInInterceptors
factory.setOutInterceptors(list);
factory.setServiceClass(HelloWorldService.class);// ws
factory.setAddress("http://xxx.xxx.xxx.xxx:8004/services/IHelloService");
Object obj = factory.create();
HelloWorldService service = (HelloWorldService) obj;
// deleteTeskTask()
CallResult cResult = service.deleteTeskTask("1223");
########## ( )#####