WebServiceラーニングノート-CXFカスタムブロッキングを追加
5677 ワード
カスタムブロッカーを使用してユーザー名とパスワードの検証を実現
クライアント:アウトブロッキング
サーバー:インブロッキング
クライアント
AddUserInterceptor.java
InterceptorHelloWorldClient.java クライアントのブロッキングの追加
サーバ側
CheckUserInterceptor.javaブロッキング
InterceptorServerApp.javaサーバ側ブロッキングをサービス側に追加
サンシリコンバレーチュートリアル
クライアント:アウトブロッキング
サーバー:インブロッキング
クライアント
AddUserInterceptor.java
package com.demo.interceptors;
import java.util.List;
import javax.xml.namespace.QName;
import org.apache.cxf.binding.soap.SoapMessage;
import org.apache.cxf.headers.Header;
import org.apache.cxf.interceptor.Fault;
import org.apache.cxf.phase.AbstractPhaseInterceptor;
import org.apache.cxf.phase.Phase;
import org.apache.xml.utils.DOMHelper;// xalan-2.7.1.jar
import org.w3c.dom.Document;
import org.w3c.dom.Element;
public class AddUserInterceptor extends AbstractPhaseInterceptor<SoapMessage> {
private String username;
private String password;
public AddUserInterceptor(String username, String password) {
super(Phase.PRE_PROTOCOL);//
this.username = username;
this.password = password;
}
/*
*
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Header>
<atguigu>
<username>umgsai</username>
<password>123456</password>
</atguigu>
</soap:Header>
<soap:Body>
<ns1:sayHi xmlns:ns1="http://demo.com/">
<text>test~~~</text>
</ns1:sayHi>
</soap:Body>
</soap:Envelope>
*
* */
@Override
public void handleMessage(SoapMessage message) throws Fault {
List<Header> headers = message.getHeaders();
Document document = DOMHelper.createDocument();
Element rootElement = document.createElement("atguigu");
Element usernameElement = document.createElement("username");
usernameElement.setTextContent(username);
rootElement.appendChild(usernameElement);
Element passwordElement = document.createElement("password");
passwordElement.setTextContent(password);
rootElement.appendChild(passwordElement);
headers.add(new Header(new QName("atguigu"), rootElement));
System.out.println(" ...");
}
}
InterceptorHelloWorldClient.java クライアントのブロッキングの追加
package com.demo;
import org.apache.cxf.interceptor.LoggingOutInterceptor;
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
import com.demo.HelloWorld;
import com.demo.User;
import com.demo.interceptors.AddUserInterceptor;
//http://blog.csdn.net/fhd001/article/details/5778915
public class InterceptorHelloWorldClient {
public static void main(String[] args) {
JaxWsProxyFactoryBean svr = new JaxWsProxyFactoryBean();
svr.setServiceClass(HelloWorld.class);
svr.setAddress("http://localhost:8080/helloWorld");
HelloWorld hw = (HelloWorld) svr.create();
// jaxws API cxf API
org.apache.cxf.endpoint.Client client = org.apache.cxf.frontend.ClientProxy
.getClient(hw);
org.apache.cxf.endpoint.Endpoint cxfEndpoint = client.getEndpoint();
//
cxfEndpoint.getOutInterceptors().add(new LoggingOutInterceptor());
//
cxfEndpoint.getOutInterceptors().add(new AddUserInterceptor("umgsai", "123456"));
User user = new User();
user.setUsername("Umgsai");
user.setDescription("test");
System.out.println(hw.sayHiToUser(user));
//String sayHi = hw.sayHi("test~~~");
//System.out.println(sayHi);
}
}
サーバ側
CheckUserInterceptor.javaブロッキング
package com.demo.interceptors;
import javax.xml.namespace.QName;
import org.apache.cxf.binding.soap.SoapMessage;
import org.apache.cxf.headers.Header;
import org.apache.cxf.interceptor.Fault;
import org.apache.cxf.phase.AbstractPhaseInterceptor;
import org.apache.cxf.phase.Phase;
import org.w3c.dom.Element;
//
public class CheckUserInterceptor extends AbstractPhaseInterceptor<SoapMessage> {
public CheckUserInterceptor() {
super(Phase.PRE_PROTOCOL);//
}
@Override
public void handleMessage(SoapMessage message) throws Fault {
Header header = message.getHeader(new QName("atguigu"));
if (header != null) {
Element element = (Element) header.getObject();
String username = element.getElementsByTagName("username").item(0).getTextContent();
String password = element.getElementsByTagName("password").item(0).getTextContent();
if (username.equals("umgsai")&&password.equals("123456")) {
System.out.println(" ...");
return;
}
}
//
System.out.println(" ");
throw new Fault(new RuntimeException(" "));
}
}
InterceptorServerApp.javaサーバ側ブロッキングをサービス側に追加
package com.demo;
import javax.xml.ws.Endpoint;
import org.apache.cxf.interceptor.LoggingInInterceptor;
import org.apache.cxf.jaxws.EndpointImpl;
import com.demo.interceptors.CheckUserInterceptor;
public class InterceptorServerApp {
public static void main(String[] args) {
System.out.println("Starting web service... ");
HelloWorldImpl implementor = new HelloWorldImpl();
String address = "http://localhost:8080/helloWorld";
Endpoint endpoint = Endpoint.publish(address, implementor);
// jaxws API cxf API
EndpointImpl jaxwsEndpointImpl = (EndpointImpl) endpoint;
org.apache.cxf.endpoint.Server server = jaxwsEndpointImpl.getServer();
org.apache.cxf.endpoint.Endpoint cxfEndpoint = server.getEndpoint();
//
LoggingInInterceptor logging = new LoggingInInterceptor();
cxfEndpoint.getInInterceptors().add(logging);
//
cxfEndpoint.getInInterceptors().add(new CheckUserInterceptor());
System.out.println("Web service started");
}
}
サンシリコンバレーチュートリアル