2017-01-25 5 views
1

Так что я пытаюсь заменить значения имени пользователя и пароля в файле XML, содержащем сообщение SOAP. Вот элементы:Как получить доступ к элементам сообщения SOAP?

<o:Security s:mustUnderstand="1" xmlns:o="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"> 
     <o:UsernameToken u:Id="uuid-68f84594-d592-470b-9bbc-b29f58b4756f-1"> 
      <o:Username></o:Username> 
      <o:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText"></o:Password> 
     </o:UsernameToken> 
    </o:Security> 

В принципе, я хочу взять имя пользователя и пароль значения из моего файла конфигурации, и поместить их в имя пользователя и пароль полей в файле XML, содержащий сообщение мыло. Это моя попытка, и она бросает NPE на docElement.getElementsByTagName линии:

public void updateUserDetails() { 
    final Properties configProperties = new Properties(); 
    try { 
     configProperties.load(new FileInputStream(PROPERTIES)); 
     final Document requestDoc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new FileInputStream(SOAP_REQUEST)); 
     final Element docElement = requestDoc.getDocumentElement(); 
     docElement.getElementsByTagName("Username").item(0).setTextContent(configProperties.getProperty("username")); 
     docElement.getElementsByTagName("Password").item(0).setTextContent(configProperties.getProperty("password")); 
    } catch(IOException | ParserConfigurationException | SAXException exception) { 
     LOGGER.error("There was an error loading the properties file", exception); 
    } 
} 

Любая помощь будет оценен по достоинству!

+0

Какая линия бросает NPE? – aUserHimself

+0

@aUserHimself Извините, забыли добавить это. Два оператора docElement.getElementsByName вызывают NPE –

+0

Но это на 'docElement.getElementsByTagName (« Username »)' или на 'configProperties.getProperty (« username »)'? – aUserHimself

ответ

1

Как представляется, это связано с проблемой пространства имен. Попробуйте указать пространство имен для тега:

String namespace = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"; 
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
factory.setNamespaceAware(true); 
final Document requestDoc = factory.newDocumentBuilder().parse(new FileInputStream(SOAP_REQUEST)); 
docElement.getElementsByTagNameNS(namespace, "Username").item(0).setTextContent(configProperties.getProperty("username")); 
docElement.getElementsByTagNameNS(namespace, "Password").item(0).setTextContent(configProperties.getProperty("password")); 

Кроме того, не забывайте, в конце концов, чтобы записать результат обратно в файл:

TransformerFactory transformerFactory = TransformerFactory.newInstance(); 
Transformer transformer = transformerFactory.newTransformer(); 
DOMSource domSource = new DOMSource(requestDoc); 
StreamResult streamResult = new StreamResult(new File(SOAP_REQUEST)); 
transformer.transform(domSource, streamResult); 
+0

Работал отлично, спасибо за помощь в чате. –

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