2017-02-09 12 views
0

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

<o:Username>Bill</o:Username> 
<o:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">Hello123</o:Password> 

Что я первоначально сделал, было обновление XML-файл сам с новым пользователем и передать, как показано в приведенном ниже коде.

try { 
     String namespace = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"; 
     configProperties.load(SecurityTokenHandler.class.getResourceAsStream(PROPERTIES_FILE)); 
     DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); 
     documentBuilderFactory.setNamespaceAware(true); 
     Document requestDoc = documentBuilderFactory.newDocumentBuilder().parse(SecurityTokenHandler.class.getResourceAsStream(SOAP_REQUEST_FILE)); 
     Element docElement = requestDoc.getDocumentElement(); 
     docElement.getElementsByTagNameNS(namespace, "Username").item(0).setTextContent(configProperties.getProperty("username")); 
     docElement.getElementsByTagNameNS(namespace,"Password").item(0).setTextContent(configProperties.getProperty("password")); 
     Transformer docTransformer = TransformerFactory.newInstance().newTransformer(); 
     DOMSource source = new DOMSource(requestDoc); 
     StreamResult result = new StreamResult(SecurityTokenHandler.class.getResource(SOAP_REQUEST_FILE).getFile()); 
     docTransformer.transform(source, result); 
    } catch(IOException | ParserConfigurationException | SAXException | TransformerException exception) { 
     LOGGER.error("There was an error loading the properties file", exception); 
    } 

Однако, я узнал позже, что, как это файл ресурсов, я не разрешается изменять сам файл. Я должен хранить XML-файл в виде строки, обновлять значения пользователя и пароля без изменения файла, а затем возвращать массив байтов xml-файла с обновленными значениями (без изменения исходного документа). Любая идея, как я могу это сделать?

+0

@aUserHimself Какие-нибудь подсказки? –

+0

Как насчет использования преобразования XSLT? Похоже, это было бы простое преобразование. Если вы считаете, что это вариант, пожалуйста, перефразируйте вопрос следующим образом: покажите полный входной XML-файл и выходной XML-файл, который вы ожидаете. –

ответ

0

Итак, решение, с которым я столкнулся, заключалось в том, чтобы в основном изменить результат на byteArrayOuputStream, а не на сам XML-файл. Проводка обновленного кода:

try { 
     String namespace = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"; 
     configProperties.load(SecurityTokenHandler.class.getClassLoader().getResourceAsStream(PROPERTIES_FILE)); 
     DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); 
     documentBuilderFactory.setNamespaceAware(true); 
     Document requestDoc = documentBuilderFactory.newDocumentBuilder().parse(SecurityTokenHandler.class.getClassLoader().getResourceAsStream(SOAP_REQUEST_FILE)); 
     Element docElement = requestDoc.getDocumentElement(); 
     docElement.getElementsByTagNameNS(namespace, "Username").item(0).setTextContent(configProperties.getProperty("username")); 
     docElement.getElementsByTagNameNS(namespace,"Password").item(0).setTextContent(configProperties.getProperty("password")); 
     Transformer docTransformer = TransformerFactory.newInstance().newTransformer(); 
     try (ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream()) { 
      StreamResult result = new StreamResult(byteArrayOutputStream); 
      DOMSource source = new DOMSource(requestDoc); 
      docTransformer.transform(source, result); 
      b = byteArrayOutputStream.toByteArray(); 
     } 
    } catch(IOException | ParserConfigurationException | SAXException | TransformerException exception) { 
     LOGGER.error("There was an error loading the properties file", exception); 
    } 

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

  • Нет связанных вопросов^_^