Делал через разбор сериализованного XML с помощью matcher. По крайней мере, в условиях это не оговаривалось. Подскажите, где может быть затык хотя бы по первому пункту?
Класс Shop можно не учитывать - делал для тестов.
package com.javarush.task.task33.task3309;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import java.io.StringWriter;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/*
Комментарий внутри xml
*/
public class Solution {
public static String toXmlWithComment(Object obj, String tagName, String comment) throws Exception {
StringWriter stringWriter = new StringWriter();
JAXBContext context = JAXBContext.newInstance(obj.getClass());
Marshaller marshaller = context.createMarshaller();
marshaller.marshal(obj, stringWriter);
/*//test zone
String stringWriter = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n" +
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n" +
"<first>\n" +
"<second>some string</second>\n" +
"<second>some string</second>\n" +
"<second><![CDATA[need CDATA because of < and >]]></second>\n" +
"<second/>\n" +
"</first>";*/
Pattern pattern = Pattern.compile("<" + tagName + "\\/?>");
Matcher matcher = pattern.matcher(stringWriter.toString());
StringBuilder outStr = new StringBuilder();
int pos = 0;
while(matcher.find()) {
outStr.append(stringWriter.toString().substring(pos, matcher.start()));
outStr.append("<!--");
outStr.append(comment);
outStr.append("-->\n");
pos = matcher.start();
}
outStr.append(stringWriter.toString().substring(pos, stringWriter.toString().length()));
return outStr.toString();
}
public static void main(String[] args) throws Exception {
//System.out.println(toXmlWithComment(new Object(), "profit", "test comment"));
}
}