Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Webservice可输出多种格式_Java_Xml_Web Services_Rest_Xsd - Fatal编程技术网

Java Webservice可输出多种格式

Java Webservice可输出多种格式,java,xml,web-services,rest,xsd,Java,Xml,Web Services,Rest,Xsd,首先,让我从一些背景开始: 我有一个web服务,它接受XML作为输入,并以XML形式输出。输出有两个不同的可能模式(还有两个)。每个请求都有一个要从中轮询数据的组列表。轮询数据库,然后从每个组生成正确格式的XML;这些组一起编译并输出XML 因此,基本上,每组数据都有一个类,负责轮询数据库并输出XML模式输出 由于有多种输出格式,代码本身非常臃肿,很难维护。因此,我正在寻找一种设计模式,以便更容易地添加新的输出格式。我探讨了使用XSLT在格式之间进行转换的选项,但它们之间存在显著差异,因此我认为

首先,让我从一些背景开始: 我有一个web服务,它接受XML作为输入,并以XML形式输出。输出有两个不同的可能模式(还有两个)。每个请求都有一个要从中轮询数据的组列表。轮询数据库,然后从每个组生成正确格式的XML;这些组一起编译并输出XML


因此,基本上,每组数据都有一个类,负责轮询数据库并输出XML模式输出

由于有多种输出格式,代码本身非常臃肿,很难维护。因此,我正在寻找一种设计模式,以便更容易地添加新的输出格式。我探讨了使用XSLT在格式之间进行转换的选项,但它们之间存在显著差异,因此我认为此选项不可行

tl;dr:RESTfulXMLWebService基于单个数据库的数据生成不同格式的XML的有效设计模式是什么


如果我能提供更多信息,请告诉我

如果格式包含相同的数据,则应使用XSLT在它们之间进行转换;但是,如果输出数据集差异太大,无法使用XSLT,则结果数据不同,需要使用不同的端点来获取数据,这意味着不同的代码路径。

如果格式包含相同的数据,则应使用XSLT在它们之间进行转换;但是,如果输出数据集如此不同,以至于您无法使用XSLT,那么您的结果数据就不同了,您需要使用不同的端点来获取数据,这意味着不同的代码路径。

,每组数据都有一个类,负责轮询数据库并输出XML模式输出。-->这个类可以分解为只轮询数据并以JavaBean或其他形式返回输出吗?如果是,我会将这个类更改为只处理数据检索。 创建控制器以确定输出格式。使用此控制器周围的命令模式,以便将来可以轻松添加更多输出格式。 为XML输出部件创建不同的组件。使用Factory模式并将输出格式的标识符传递给此。如果输出格式非常复杂,请考虑使用JAXB。否则,重用已经存在的类中存在的任何代码


让我知道这是否有帮助。

因此,基本上,每组数据都有一个类,负责轮询数据库并输出XML模式输出。-->这个类可以分解为只轮询数据并以JavaBean或其他形式返回输出吗?如果是,我会将这个类更改为只处理数据检索。 创建控制器以确定输出格式。使用此控制器周围的命令模式,以便将来可以轻松添加更多输出格式。 为XML输出部件创建不同的组件。使用Factory模式并将输出格式的标识符传递给此。如果输出格式非常复杂,请考虑使用JAXB。否则,重用已经存在的类中存在的任何代码


让我知道这是否有帮助。

看一看和JAX-RS。看一看,JAX-RS.JAXB当前用于构建这两个输出。我从你的回答中得到的是,我应该分离出输出格式(然后构建代码来控制使用哪个“类”,等等)。这是可行的,但似乎并不能提高可维护性,因为我现在所有的代码都还在使用,而且更多的代码还在使用。对此有什么建议吗?是的,您将使用您现在拥有的代码,实际上将向其中添加更多代码。然而,您的代码将是模块化的,当添加新的输出格式时,您知道现有输出格式的代码流根本没有被触及。因此,测试工作将减少,因为您必须只测试新添加的组件。JAXB目前用于构建这两个输出。我从你的回答中得到的是,我应该分离出输出格式(然后构建代码来控制使用哪个“类”,等等)。这是可行的,但似乎并不能提高可维护性,因为我现在所有的代码都还在使用,而且更多的代码还在使用。对此有什么建议吗?是的,您将使用您现在拥有的代码,实际上将向其中添加更多代码。然而,您的代码将是模块化的,当添加新的输出格式时,您知道现有输出格式的代码流根本没有被触及。因此,测试工作将减少,因为您必须只测试新添加的组件。