2015-02-17 2 views
2

У меня есть следующий метод:Java Генерирование SOAP Envelope

String [] getEmployeeDetails (интермедиат Employeenumber); assosiate запрос выглядеть следующим образом:

<?xml version="1.0" encoding="UTF-8" standalone="no" ?> 
 
    <SOAP-ENV:Envelope 
 
    SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" 
 
    xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" 
 
    xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" 
 
    xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" 
 
    xmlns:xsd="http://www.w3.org/1999/XMLSchema"> 
 
\t <SOAP-ENV:Body> 
 
\t \t <ns1:getEmployeeDetails 
 
\t \t xmlns:ns1="urn:MySoapServices"> 
 
\t \t \t <param1 xsi:type="xsd:int">1016577</param1> 
 
\t \t </ns1:getEmployeeDetails> 
 
\t </SOAP-ENV:Body> 
 
    </SOAP-ENV:Envelope>

этот пример пришел по этой ссылке [http://www.soapuser.com/basics3.html][1]

Я не понимаю, как они это делают, чтобы создать его с Явы ими программным. Пожалуйста, помогите!

ответ

6

В основном вам нужно использовать SAAJ API, это API, которые используют SOAPMessage и дать вам некоторые объекты и методы для создания запроса SOAP программно, вы shouls см this ссылку для дальнейшего использования. Также просмотрите documentation от Oracle, они дают вам несколько полезных примеров. Например, вы можете это проверить link

MessageFactory messageFactory = MessageFactory.newInstance(); 
SOAPMessage soapMessage = messageFactory.createMessage(); 

// Retrieve different parts 
SOAPPart soapPart = soapMessage.getSOAPPart(); 
SOAPEnvelope soapEnvelope = soapMessage.getSOAPPart().getEnvelope(); 

// Two ways to extract headers 
SOAPHeader soapHeader = soapEnvelope.getHeader(); 
soapHeader = soapMessage.getSOAPHeader(); 

// Two ways to extract body 
SOAPBody soapBody = soapEnvelope.getBody(); 
soapBody = soapMessage.getSOAPBody(); 

// To add some element 
SOAPFactory soapFactory = SOAPFactory.newInstance(); 
Name bodyName = soapFactory.createName("getEmployeeDetails","ns1","urn:MySoapServices"); 
SOAPBodyElement purchaseLineItems = soapBody.addBodyElement(bodyName); 
Name childName = soapFactory.createName("param1"); 
SOAPElement order = purchaseLineItems.addChildElement(childName); 
order.addTextNode("1016577"); 
+0

Спасибо за ваш ответ. Я попробую этот подход. Я думаю, что это соответствует моей потребности. – simplo

+1

Привет! Я пытаюсь это сделать, и я могу создать свой SoapMessage правильно. Теперь я хочу вставить следующее: xsi: type = "xsd: int" для параметра simplo

+0

javax.xml.soap.Name это правильный класс имен? from saaj.jar – Nayeem

0

Вы можете захватить wsdl из службы мыла (обычно что-то вроде http://endpointurl?wsdl), а затем использовать утилиту wsdl2java Apache CXF для генерации кода с параметром -client. Сгенерированный код сделает для вас большую часть работы с точки зрения создания действительного запроса SOAP и отправки его в конечную точку, или если вы просто хотите увидеть, как он работает, вы можете следить за вызовами, которые он делает в источник CXF и посмотрите, как они это делают.

http://cxf.apache.org/docs/how-do-i-develop-a-client.html

+0

Спасибо за ваш ответ, но у меня нет файла wsdl. я попробую подход от Koitoer – simplo

+0

Если служба SOAP, которую вы вызываете, публикуется на сервере приложений, часто бывает, что вы можете загрузить wsdl, просто добавив «? wsdl» в конец базового URL-адреса конечной точки, который вы используйте для вызова службы. Просто FYI на случай, если вам не удастся просто загрузить копию wsdl и не выполнять много ручной работы по кодированию. – Hubschrauber

+0

Да, я знаю, но эта служба SOAP не имеет wsdl, поэтому я пытаюсь сам ее сконструировать, чтобы отправить ее в запрос Http. теперь мне нужно kwo, как установить ограничение для пространства имен, например xsi: type = "xsd: int. Я искал его и обнаружил, что должен использовать что-то вроде XMLType_INT. Можете ли вы сказать мне, пожалуйста, использовать его? Спасибо за помощь – simplo

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