2
SOAP 웹 서비스를 사용하고 있으며 추가 평가를 위해 주 클라이언트 클래스 인 응용 프로그램 수준의 정보를 클라이언트 처리기 수준으로 전달해야합니다. 내 클라이언트 및 클라이언트 처리기 아래 나열했습니다. 나는 텍스트 노드를 SOAPHeader에 추가 할 수 있도록 처리기에있는 "discountVal"변수에 사용자 및 저장소의 값을 스캔하려고합니다.응용 프로그램에서 처리기 수준으로 정보 전달 SOAP
CLIENT :
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package client;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import javax.xml.ws.handler.Handler;
import javax.xml.ws.handler.HandlerResolver;
import javax.xml.ws.handler.PortInfo;
/**
*
* @author Jack
*/
public class Client
{
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
client.ItemPriceServiceService service = new client.ItemPriceServiceService();
service.setHandlerResolver(new ClientHandlerResolver());
client.ItemPriceService port = service.getItemPriceServicePort();
String discount = "25";
Scanner scan = new Scanner(System.in);
String item = scan.next();
while(!item.equals("bye"))
{
double price = getPrice(item);
System.out.println(price);
item = scan.next();
}
if(item.equals("bye"))
{
System.exit(0);
}
}
private static double getPrice(java.lang.String arg0) {
client.ItemPriceServiceService service = new client.ItemPriceServiceService();
client.ItemPriceService port = service.getItemPriceServicePort();
return port.getPrice(arg0);
}
private static class ClientHandlerResolver implements HandlerResolver {
public ClientHandlerResolver() {
}
@Override
public List<Handler> getHandlerChain(PortInfo portInfo) {
List<Handler> hchain = new ArrayList<Handler>();
hchain.add(new clientHandler());
return hchain;
}
}
}
클라이언트 HANDLER
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package client;
import java.util.Collections;
import java.util.Set;
import javax.xml.namespace.QName;
import javax.xml.soap.*;
import javax.xml.ws.handler.MessageContext;
import javax.xml.ws.handler.soap.SOAPHandler;
import javax.xml.ws.handler.soap.SOAPMessageContext;
/**
*
* @author Jack
*/
public class clientHandler implements SOAPHandler<SOAPMessageContext> {
public boolean handleMessage(SOAPMessageContext context)
{
Boolean outgoing = (Boolean) context.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);
if(outgoing){
try{
SOAPMessage soapMsg = context.getMessage();
SOAPEnvelope soapEnv = soapMsg.getSOAPPart().getEnvelope();
SOAPHeader soapHeader = soapEnv.getHeader();
if (soapHeader == null){
soapHeader = soapEnv.addHeader();
}
//get discount value FROM CLIENT
String discountVal = "25";
QName qname = new QName("http://testOne", "discount");
SOAPHeaderElement soapHeaderElement = soapHeader.addHeaderElement(qname);
soapHeaderElement.setActor(SOAPConstants.URI_SOAP_ACTOR_NEXT);
soapHeaderElement.addTextNode(discountVal);
soapMsg.saveChanges();
}catch(SOAPException e){
System.err.println(e);
}
}
//continue other handler chain
return true;
}
public Set<QName> getHeaders() {
return Collections.EMPTY_SET;
}
public boolean handleFault(SOAPMessageContext messageContext) {
return true;
}
public void close(MessageContext context) {
}
}
어떤 도움을 크게 감상 할 수있다! 나는 MessageContext를 사용하는 것이이 일을 할 수있는 방법이라고 생각하지만, 어디에서 시작해야하는지 확신 할 수 없다.