私は応答としてXMLファイルを返すSpring Restful Webサービスに取り組んでいます。このXMLファイルは、EclipseプロジェクトのMAVENビルドのmain/resourcesフォルダ内に配置されています。このサービスは、呼び出し元から特定のパラメータを受け取り、それらのパラメータに基づいて、XMLファイルを更新する必要があります。このプロジェクトは、運用サーバーにWARとして展開されます。私のローカルプロジェクトでは、xmlファイルが更新されているのがわかりますが、実動サーバーでは更新されていません。運用サーバーでこれをどのように動作させることができますか?以下Spring REST Webサービス| XMLを更新してそれを応答として送信してください
以下
@RestController
public class HelloWorldRestController {
@Autowired
UserService userService; // Service which will do all data
// retrieval/manipulation work
@Autowired
DialogServiceXml dialogService;
// Returning an xml file in the response
@CrossOrigin(origins = "*")
@RequestMapping(value = "/getUpdatedDialog", method = RequestMethod.POST, produces = "application/xml")
public ResponseEntity<InputStreamResource> downloadXMLFile(@RequestBody Dialog dialog,
UriComponentsBuilder ucBuilder) throws IOException {
// Update the xml file named : "mor_dialog.xml"
dialogService.updateXml(new StringBuilder(dialog.getClassName()), new StringBuilder(dialog.getResponse()));
// Pick up the updated file from the classpath
ClassPathResource xmlFile = null;
try {
xmlFile = new ClassPathResource("mor_dialog.xml");
} catch (Exception exception) {
exception.printStackTrace();
}
// Code to prevent caching so that always the latest version of the file
// is being sent.
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.add("Cache-Control", "no-cache, np-store, must-revalidate");
httpHeaders.add("Pragma", "no-cache");
httpHeaders.add("Expires", "0");
//httpHeaders.add("Access-Control-Allow-Origin", "http://nlc-mor-furniture.mybluemix.net");
return ResponseEntity.ok().headers(httpHeaders).contentLength(xmlFile.contentLength())
.contentType(MediaType.parseMediaType("application/octet-stream"))
.body(new InputStreamResource(xmlFile.getInputStream()));
}
}
、XMLをアンマーシャルクラスである入力パラメータに基づいて、それを更新し、その後、バック
@Service("dialogService")
public class DialogServiceXml implements DialogServiceXmlImpl {
@SuppressWarnings({ "rawtypes", "unchecked" })
@Override
public void updateXml(StringBuilder className, StringBuilder response) {
JAXBContext jaxbContext = null;
ClassLoader classLoader = getClass().getClassLoader();
try {
jaxbContext = JAXBContext.newInstance("com.sau.watson.dialog.xsd.beans");
Unmarshaller JAXBUnmarshaller = jaxbContext.createUnmarshaller();
Marshaller JAXBMarshaller = jaxbContext.createMarshaller();
JAXBMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
JAXBMarshaller.setProperty(Marshaller.JAXB_NO_NAMESPACE_SCHEMA_LOCATION, "WatsonDialogDocument_1.0.xsd");
File mor_dialog = new File(classLoader.getResource("mor_dialog.xml").getFile());
//File mor_dialog = new File(classLoader.getResource("../../mor_dialog.xml").getFile());
mor_dialog.setWritable(true);
//File mor_dialog_updated = new File(classLoader.getResource("mor_dialog_updated.xml").getFile());
InputStream is = new FileInputStream(mor_dialog);
JAXBElement dialog = (JAXBElement) JAXBUnmarshaller.unmarshal(is);
is.close();
//JAXBElement dialog = (JAXBElement) JAXBUnmarshaller.unmarshal(new FileInputStream("src/main/java/com/sau/watson/dialog/xml/mor_dialog.xml"));
DialogType dialogType = (DialogType) dialog.getValue();
// System.out.println(dialogType.toString());
// System.out.println(dialogType);
FlowType flowType = (FlowType) dialogType.getFlow();
for (FolderNodeType folderNodeType : flowType.getFolder()) {
// System.out.println(folderNodeType.getLabel());
if (folderNodeType.getLabel().equalsIgnoreCase("Library")) {
for (ChatflowNode libChatFlowNode : folderNodeType.getInputOrOutputOrDefault()) {
FolderNodeType libraryFolderNode = (FolderNodeType) libChatFlowNode;
// System.out.println(libraryFolderNode.getId());
// System.out.println(libraryFolderNode.getLabel());
StringBuilder classNameFromXml = new StringBuilder();
for (ChatflowNode node : libraryFolderNode.getInputOrOutputOrDefault()) {
InputNodeType inputNodeType = (InputNodeType) node;
// Getting the class. Class name are encapsulated
// inside the <grammar> node
/**
* <grammar> <item>Salesperson_Great</item>
* <item>Great</item> </grammar>
*/
for (Object grammerTypeObj : inputNodeType.getActionOrScriptOrGrammar()) {
GrammarType grammarType = (GrammarType) grammerTypeObj;
// We are always getting the first item as it is
// assumed that there is only one class in each
// grammar node
classNameFromXml
.append(grammarType.getItemOrSourceOrParam().get(0).getValue().toString());
System.out.println("Class Name is : " + className);
}
// We are always getting the first item as it is
// assumed that there is only one class in each
// grammar node
/*
* List<Object> grammarTypeObj =
* inputNodeType.getActionOrScriptOrGrammar();
* GrammarType grammarType = (GrammarType)
* grammarTypeObj;
*
* String className =
* grammarType.getItemOrSourceOrParam().get(0).
* getValue().toString();
*
* System.out.println("Class Name is : "+className);
*/
if (!classNameFromXml.toString().equalsIgnoreCase(className.toString())) {
continue;
}
// Getting all the response items corresponding to
// this class
for (ChatflowNode outputNodeObj : inputNodeType.getInputOrOutputOrDefault()) {
OutputNodeType outputNode = (OutputNodeType) outputNodeObj;
for (Object promptTypeObj : outputNode.getActionOrScriptOrPrompt()) {
PromptType promptType = (PromptType) promptTypeObj;
List<Serializable> responseItemObjs = promptType.getContent();
for (Object responseItemObj : responseItemObjs) {
/*
* if (responseItemObj instanceof
* String) {
* System.out.println(((String)
* responseItemObj).trim()); }
*/
if (responseItemObj instanceof JAXBElement) {
// System.out.println("JAXBElement
// Instance");
JAXBElement responseItem = (JAXBElement) responseItemObj;
System.out.println("The old response is : " + responseItem.getValue().toString());
responseItem.setValue(response.toString());
}
}
}
}
}
}
}
}
FileOutputStream os = new FileOutputStream(mor_dialog);
JAXBMarshaller.marshal(dialog, os);
//os.flush();
os.close();
//JAXBMarshaller.marshal(dialog, new FileOutputStream("src/main/java/com/sau/watson/dialog/xml/mor_dialog.xml"));
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
任意のコード、任意の提案/解決にサーバーログからの出力が必要です。あなたはそれらを提供することができます –
私が取り組んでいる追加されたコードを追加してください。ありがとう –