Objective c 使用ApacheCxf Restful Web服务的ASIHttprequest
我正在从事一个涉及服务器端ApacheCXF的项目,该项目提供RESTfulWebService,以JSON格式输入和输出。客户端是一个带有ASIHTTPRequest和SBJson的MacOSX应用程序。在过去的几天里,我遇到了各种各样的问题,无法找到解决办法 在服务器端:Objective c 使用ApacheCxf Restful Web服务的ASIHttprequest,objective-c,cocoa,apache,cxf,asihttprequest,Objective C,Cocoa,Apache,Cxf,Asihttprequest,我正在从事一个涉及服务器端ApacheCXF的项目,该项目提供RESTfulWebService,以JSON格式输入和输出。客户端是一个带有ASIHTTPRequest和SBJson的MacOSX应用程序。在过去的几天里,我遇到了各种各样的问题,无法找到解决办法 在服务器端: @Override @POST @Path("/testService/") @Consumes(MediaType.APPLICATION_JSON) public Boolean service1(SomeMetaDa
@Override
@POST
@Path("/testService/")
@Consumes(MediaType.APPLICATION_JSON)
public Boolean service1(SomeMetaData metaData)
{
return this.testMetaData(metaData);
}
在客户端:
NSString *requestURLString = [NSString stringWithFormat:@"%@%@", serverURL, @"/webServices/rest/testService"];
NSURL *url = [NSURL URLWithString:requestURLString];
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request setValidatesSecureCertificate:NO];
[request setRequestMethod:@"POST"];
[request addRequestHeader:@"Content-Type" value:@"application/json"];
NSString* jsonMetaData = [[SomeMetaData proxyForJson] JSONRepresentation];
NSMutableData *requestBody = [[NSMutableData alloc] initWithData:[jsonMetaData dataUsingEncoding:NSUTF8StringEncoding]];
[request setPostBody:requestBody];
[request startAsynchronous];
[request setCompletionBlock:^{
NSLog(@"Response: %@", [request responseString]);
}];
[request setFailedBlock:^{
NSLog(@"Failed: %@", [request error]);
}];
元数据对象生成的JSON字符串如下所示:
{
"metaData":
{
"name":"test.txt",
"remoteKey":"4",
"remoteShare":"test1"
}
}
客户机和服务器位于不同的物理计算机中,但位于同一局域网内
第一期:
控制台中随机出现一个错误域错误。它的外观没有明显的图案,但它肯定会在我第一次尝试时出现
Failed: Error Domain=ASIHTTPRequestErrorDomain Code=1 "A connection failure occurred" UserInfo=0x10013a030 {NSLocalizedDescription=A connection failure occurred, NSUnderlyingError=0x100190cf0 "The operation couldn’t be completed. (kCFErrorDomainCFNetwork error -1005.)"}
第二期:
这似乎是一个json解析器错误,我真的不明白为什么。服务器端和客户端的容器具有相同的结构
Response for getExistsFileRequest: JAXBException occurred : unexpected element (uri:"", local:"metaData"). Expected elements are <{}someMetaData>. unexpected element (uri:"", local:"metaData"). Expected elements are <{}someMetaData>.
那不是JSON
{
metaData = {
name = "test.txt";
remoteKey = 4;
remoteShare = test1;
};
}
你是说:
{
"metaData": {
"name":"test.txt",
"remoteKey":"4",
"remoteShare":"test1"
}
}
(如果您这样做了,请更新您的问题,我将删除此答案;)JAXBException位于这个xml名称空间(javax.xml.bind.JAXBException)中
您正在尝试将JSON解析为XML吗?Ye,我刚刚使用了一个解析器来清除结构。我会更新我的问题。谢谢。为什么不直接从服务器粘贴实际字符串,这样我们就可以看到解析器抛出错误的原因了?我无法在服务器端截获请求主体。我试过用Fiddler,但不确定为什么它没有拦截任何东西。但我确实尝试在客户端拦截请求。请求头和请求体都已正确设置。您的jsonMetadata是什么样子的?它就像POST一样。json的纯文本格式。我能够用Wireshark在服务器端嗅探数据包。看起来非常好。感谢您回来:D肯定是JSON,正如我在服务器端的注释所指定的:@Consumes(MediaType.APPLICATION_JSON)。那么如何引发XML异常?服务器上的堆栈跟踪是什么?
{
"metaData": {
"name":"test.txt",
"remoteKey":"4",
"remoteShare":"test1"
}
}