2013-11-28 6 views
0

Я написал пользовательский SOAP-клиент на Java и, хотя он работает, я чувствую, как я писал, что это очень элементарно. Я плохо разбираюсь в ООП, и, как вы можете видеть, вся работа выполняется в одном классе. Не могли бы вы помочь улучшить это или дать какую-либо идею.Написание SOAP-клиента в Java

Я прочитал статьи о создании мыльных клиентов, таких как this, и могу сказать, что классы очень хорошо организованы.

import java.text.ParseException; 
import java.text.SimpleDateFormat; 
import java.util.Date; 

import javax.xml.soap.MessageFactory; 
import javax.xml.soap.MimeHeaders; 
import javax.xml.soap.SOAPBody; 
import javax.xml.soap.SOAPConnection; 
import javax.xml.soap.SOAPConnectionFactory; 
import javax.xml.soap.SOAPElement; 
import javax.xml.soap.SOAPEnvelope; 
import javax.xml.soap.SOAPMessage; 
import javax.xml.soap.SOAPPart; 

import org.w3c.dom.Document; 

public class ConInfoService { 
private final static String BLANK = ""; 
    private final static String SOAP_SERVER = "http://server.com/ConInfoService.asmx"; 
    private final static String PREFIX_XSI = "xsi"; 
    private final static String PREFIX_XSD = "xsd"; 
    private final static String PREFIX_SOAP = "soap"; 
    private final static String URI_HOST = "server.com"; 
    private final static String URI_GETCULIST = "http://tempuri.org/GetCuList"; 
    private final static String URI_XSI = "http://www.w3.org/1999/XMLSchema-instance"; 
    private final static String URI_XSD = "http://www.w3.org/1999/XMLSchema"; 
    private final static String URI_SOAP = "http://schemas.xmlsoap.org/soap/envelope/"; 
    private final static String URI_TEMPURI = "http://tempuri.org/"; 
    private final static String HEADER_HOST = "Host"; 
    private final static String HEADER_SOAPACTION = "SOAPAction"; 

    public SOAPMessage getCuList(Date asDate, String asConAvailable, String asConChanged, String asMso) throws Exception { 
      SOAPConnectionFactory soapConnectionFactory = SOAPConnectionFactory.newInstance(); 
      SOAPConnection soapConnection = soapConnectionFactory.createConnection(); 

      String soapServer = SOAP_SERVER;; 
      SOAPMessage soapMessage = createSOAPRequest(asDate, asConAvailable, asConChanged, asMso); 
      return soapConnection.call(soapMessage, soapServer); 
    } 

    private static SOAPMessage createSOAPRequest(Date asDate, String asConAvailable, String asConChanged, String asMso) throws Exception { 
     if (asDate != null && asConAvailable != null && asConChanged != null && asMso != null) { 
      MessageFactory messageFactory = MessageFactory.newInstance(); 
      SOAPMessage soapMessage = messageFactory.createMessage(); 
      SOAPPart soapPart = soapMessage.getSOAPPart(); 

      SOAPEnvelope envelope = soapPart.getEnvelope(); 
      envelope.addNamespaceDeclaration(PREFIX_XSI, URI_XSI); 
      envelope.addNamespaceDeclaration(PREFIX_XSD, URI_XSD); 
      envelope.addNamespaceDeclaration(PREFIX_SOAP, URI_SOAP); 

      SOAPBody soapBody = envelope.getBody(); 
      SOAPElement getCuListElem = soapBody.addChildElement("GetCuList", BLANK, URI_TEMPURI); 
      SOAPElement asDateElem = getCuListElem.addChildElement("asDate", BLANK); 
      SOAPElement asConAvailableElem = getCuListElem.addChildElement("asConAvailable", BLANK); 
      SOAPElement asConChangedElem = getCuListElem.addChildElement("asConChanged", BLANK); 
      SOAPElement asMsoElem = getCuListElem.addChildElement("asMso", BLANK);  

      asDateElem.addTextNode(formatDate(asDate)); 
      asConAvailableElem.addTextNode(asConAvailable.trim()); 
      asConChangedElem.addTextNode(asConChanged.trim()); 
      asMsoElem.addTextNode(asMso.trim()); 

      MimeHeaders headers = soapMessage.getMimeHeaders(); 
      headers.addHeader(HEADER_HOST, URI_HOST); 
      headers.addHeader(HEADER_SOAPACTION, URI_GETCULIST); 

      soapMessage.saveChanges(); 

      return soapMessage; 
     } 

     return null; 
    } 
} 

ответ

5

Почему бы вам не использовать JAX-WS/JAXB в пути для генерации класса WSDL на основе? Например, this или this?

+0

Во второй раз я использую реализацию JAX-WS (или встроенную в сам JDK). Если это не так просто, JAX-WS и JAXB просто прекрасно документированы! – Gimby

Смежные вопросы