我有大约250,000个JSON格式的文件,每个文件中都有一个对象(格式化CouchDB喜欢它的方式是_id).将这些作为记录导入我的远程CouchDB服务器的最佳方法是什么?
- 我在Windows XP机器上.
- 我有互联网访问权限,但我不能在我的本地计算机上设置couchDB服务器并使其可以访问WWW(防火墙限制.)所以不容易复制.
我想读取一个包含模式声明的XML文件.
这就是我想做的一切,请阅读.我不在乎它是否有效,但我希望它形成良好.
问题是读者正在尝试读取模式文件,并且失败了.
我甚至不想尝试.
我已经尝试禁用验证,但它仍然坚持尝试读取模式文件.
理想情况下,我想用库存Java 5 JDK来做这件事.
这是我到目前为止所做的,非常简单:
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setValidating(false);
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(file);
Run Code Online (Sandbox Code Playgroud)
这是我回来的例外:
java.lang.RuntimeException: java.io.IOException: Server returned HTTP response code: 503 for URL: http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd
Run Code Online (Sandbox Code Playgroud)
是的,这个HAPPENS是一个XHTML模式,但这不是一个"XHTML"问题,它是一个XML问题.只是指出这一点,所以人们不会分心.并且,在这种情况下,W3C基本上是在说"不要求这个东西,这是一个愚蠢的想法",我同意.但是,这又是问题的细节,而不是问题的根源.我不想要求它.
我们正在使用WCF构建一个RESTful API(目前.Net 3.5,但很快将转向.Net 4).我们有一个功能框架,但目前没有安全保障.它需要可以从.Net应用程序以及iOS,Android和Web应用程序访问.
我们想使用此处和此处描述的HMAC身份验证方案,但在描述如何验证哈希时,这两个示例似乎都分崩离析.第一个示例无法描述UserKeys对象(哈希表?),第二个示例缺少客户端和服务器端的GetUserKey方法.
任何人都可以解释如何在这些示例中生成/存储/检索/使用"用户密钥"/令牌,或者提供如何在RESTful WCF服务中使用HMAC授权的更好示例(如果可能的话,还有源代码)?
编辑: 经过更多的研究,我们确定我们需要更多的" 授权 "技术而不是" 身份验证 "技术(语义?).我们实施了基本授权并保护了SSL背后的API.基本授权使用与Web请求相同的"授权"标头作为HMAC 身份验证方案,但传递用Base64编码的用户名:密码字符串而不是令牌.这允许我们针对我们的数据库自定义验证用户,以确定用户是否获得许可并具有访问所需API方法的适当安全权限.
我们当然愿意听取有关如何完成自定义用户名/密码验证的其他选项以及其他保护API的方法.
我是RESTful WCF服务的新手,所以请耐心等待.我正在尝试构建一个简单的RESTful WCF服务,该服务返回一个学生列表作为json响应.一切正常,直到我尝试将json字符串转换回客户端上的Student对象列表.
这是我的运营合同:
[OperationContract]
[WebGet(UriTemplate = "Students/", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped)]
public List<Student> FetchStudents()
{
//Fetch and return students list
}
Run Code Online (Sandbox Code Playgroud)
客户代码:
static void Main(string[] args)
{
HttpClient client = new HttpClient("http://localhost/StudentManagementService/StudentManagement.svc/");
response = client.Get("Students/");
response.EnsureStatusIsSuccessful();
JavaScriptSerializer json_serializer = new JavaScriptSerializer();
string str = response.Content.ReadAsString();
List<Student> st = json_serializer.Deserialize<List<Student>>(str);
}
Run Code Online (Sandbox Code Playgroud)
此代码显然失败,因为服务返回的json字符串如下所示:
{"FetchStudentsResult":[{"Course":"BE","Department":"IS","EmailID":"b@gmail.com","ID":1,"Name":"Vinod"}]}
Run Code Online (Sandbox Code Playgroud)
由于某种原因,json响应被包装在FetchStudentsResult中.现在处于调试模式,如果我强行删除这个FetchStudentsResult包装,我的反序列化工作完全正常.
我试过DataContractJsonSerializer但结果完全一样.有人能告诉我我错过了什么吗?
我有一个基于Spring MVC和Resteasy的REST服务,我需要通过发送multipart/mixed请求进行测试.
该服务编码如下:
@POST
@Path("/mixedMimeText")
@Consumes("multipart/mixed")
@ResponseStatus(HttpStatus.OK)
public String createMime(@Context ServletContext servletContext, MultipartInput input) throws Exception, IOException {
logger.info("Processing /mixedMimeText");
for(InputPart p : input.getParts()){
logger.info("Headers : " + p.getHeaders());
logger.info("MediaType : " + p.getMediaType());
logger.info("Body : " + p.getBodyAsString());
logger.info("--------------------------------------------------- ");
}
return "TEST";
}
Run Code Online (Sandbox Code Playgroud)
我使用以下文件作为multipart mime内容发送
--ABC123Boundary
Content-Type: text/xml
<?xml version="1.0" ?>
<request>
<account-id>XXXX-XXXX-XXXX-XXXX</account-id>
<reference>12345</reference>
<app-name>XXXXXXXXX</app-name>
<information>
<calling-party>
<name>Joe Bloggs</name>
<identifier>441234567890</identifier>
</calling-party>
<called-party>
<name>John Smith</name>
<identifier>15551234567</identifier>
</called-party>
</information>
</request>
--ABC123Boundary
Content-Type: text/xml
UklGRkBAAABXQVZFZm10IBAAAAAHAAEAQB8AAEAfAAABAAgAZmFjdAQAAAAPQ
AAAZGF0YRBAAABn5///////////////5///Z+fn///n////////5////////2f//2f//+f//+f////n/
///////52f//////2f//////2f/////5////////+f/////Z+f///////////////9n//9nZ/9n////5+f///9
<snip>
//+f//////2f/////////5//n//////////9n
--ABC123Boundary--
Run Code Online (Sandbox Code Playgroud)
我使用curl客户端使用以下命令发送请求: …
我正在探索用于生成Web内容的XML - > XSLT - > HTML meme.我的XSLT经验很少.
我很好奇XSLT中有哪些机制可用于处理抽象或"重构".
例如,对于通用HTML和服务端包含,可以将许多页面模板化并分解为具有(例如)公共标题,导航和页脚段的位置,并且页面本身基本上是正文.
常见的标记语言JSP,PHP,ASP,允许所有这些段具有动态内容(例如将用户名添加到每个标题块).
JSP通过允许您创建Tag文件甚至更远,它可以接受在生成内容时使用的参数,甚至可以包围和处理标记本身内容.
我很好奇在XSLT中完成了类似的功能.有什么设施可以为创建HTML页面之类的东西制作可重复使用的XSLT块?
我所拥有的是一组表示消息类型的Java类(接近25个).它们都继承自我想要抽象的Message类.每种消息类型都会向Message超类提供的集合中添加一些其他字段.
我正在使用RESTeasy实现一些RESTful Web服务,并希望有这样的方法:
public Response persist(Message msg) {
EntityTransaction tx = em.getTransaction();
tx.begin();
try {
em.persist(msg);
} catch (Exception e) {
e.printStackTrace();
}
tx.commit();
em.close();
return Response.created(URI.create("/message/" + msg.getId())).build();
}
Run Code Online (Sandbox Code Playgroud)
而不是有25个单独的持久化方法,每个方法都适合特定的消息类型.
目前,我已经注释了我的Message类,如下所示:
@MappedSuperclass
@XmlRootElement(name = "message")
public abstract class Message implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
Integer id;
@Embedded
Header header;
@Embedded
SubHeader subHeader;
Run Code Online (Sandbox Code Playgroud)
我的子类看起来像这样:
@Entity
@XmlRootElement(name="regmessage")
@XmlAccessorType(XmlAccessType.FIELD)
public class REGMessage extends Message {
@XmlElement(required = true)
int statusUpdateRate;
@XmlElement(required = true)
int networkRegistrationFlag;
Run Code Online (Sandbox Code Playgroud)
这会创建一个看起来应该工作的模式,但是在持久化操作期间在服务器端看到的所有内容都是Message对象(子类型完全丢失,或者至少它没有被编组回其正确的子类型).在客户端,要调用方法,我这样做:
REGMessage msg …Run Code Online (Sandbox Code Playgroud) 我编写了使用Jersey Client API向REST服务发出GET请求的客户端.响应是对象的集合,我需要反序列化它.这是我的代码:
ClientConfig clientConfig = new DefaultClientConfig();
clientConfig.getFeatures().put(JSONConfiguration.FEATURE_POJO_MAPPING,
Boolean.TRUE);
Client client = Client.create(clientConfig);
WebResource r = client
.resource("http://localhost:8080/rest/gadgets");
Run Code Online (Sandbox Code Playgroud)
和表示"小工具"模型的类(使用@XmlRootElement进行JAXB处理注释):
@XmlRootElement
public class Gadget {
private String url;
private String title;
private String name;
public Gadget() {
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getName() {
return name;
}
public void setName(String …Run Code Online (Sandbox Code Playgroud) 我有合同:
[OperationContract]
[WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Xml, UriTemplate = "GetCategoriesGET/{userIdArg}", BodyStyle = WebMessageBodyStyle.Bare)]
List<Video> GetVideosGET(string userIdArg);
[WebInvoke(Method = "POST", UriTemplate = "evals")]
[OperationContract]
void SubmitVideoPOST(Video videoArg, string userId);
Run Code Online (Sandbox Code Playgroud)
我有实施方法:
public List<Video> GetVideosGET(string userIdArg)
{
List<Video> catsToReturn = new List<Video>();
if (Int32.Parse(userIdArg) == 1)
{
catsToReturn = catsForUser1;
}
else if (Int32.Parse(userIdArg) == 2)
{
catsToReturn = catsForUser2;
}
return catsToReturn;
}
public void SubmitVideoPOST(Video videoArg, string userId)
{
}
Run Code Online (Sandbox Code Playgroud)
当我浏览到:
http://localhost:52587/Api/Content/VLSContentService.svc/GetCategoriesGET/1
Run Code Online (Sandbox Code Playgroud)
我得到这个错误:
'/'应用程序中的服务器错误.合同'IVLSContentService'的操作'SubmitVideoPOST'指定要序列化的多个请求体参数,而不包含任何包装元素.最多可以在没有包装元素的情况下序列化一个body参数.删除额外的body参数或将WebGetAttribute/WebInvokeAttribute上的BodyStyle属性设置为Wrapped.
当我添加POST的新方法(我还没有尝试访问)时,我才开始在Get请求中收到此错误,这是什么意思?我不能使用多个参数吗?
我正在考虑使用WCF REST服务应用程序模板来托管我的所有RESTful Web服务,但是,我也希望能够使用SOAP端点公开我的WCF服务.
我可以使用以下示例轻松地在WCF 4中使用WCF RESTful服务:http://christopherdeweese.com/blog2/post/drop-the-soap-wcf-rest-and-pretty-uris-in-net-4
这可能吗?我想在Global.asax中应该有一种方法可以连接其他端点并指定是否使用了basicHttpBinding.我是否需要不使用WCF REST服务应用程序模板并创建标准服务应用程序并通过配置将其连接起来?
谢谢你的帮助.