【发布时间】:2011-12-22 18:16:57
【问题描述】:
我正在开展一个项目,该项目涉及服务器端的 Apache CXF,提供 RESTful Web 服务,以 JSON 格式接收和输出。客户端是一个带有 ASIHTTPRequest 和 SBJson 的 Mac OSX 应用程序。这几天遇到各种问题,一直没找到解决办法。
在服务器端:
@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>.
这种问题似乎只发生在我的请求中有参数时。我的其他没有输入参数的 GET 网络服务运行良好。
我已经被这个问题困扰了好几天了。任何建议将不胜感激!
如果有人想知道,在服务器端为所有 Web 服务定义了根路径,因此在这种情况下不太可能成为问题。
*另一个编辑:* 服务器端的请求/响应标头
[ERROR] 500 - POST /webServices/rest/testService (192.168.1.29) 199 bytes
Request headers
Host: 192.168.1.206
User-Agent: ASIHTTPRequest (Macintosh; Mac OS X 10.7.2; en_CA)
Content-Length: 240
Content-Type: application/json
Accept-Encoding: gzip
Authorization: Basic cmthbmc6Um9LYTEyMyE=
Connection: close
Response headers
Connection: close
Content-Type: text/plain
Date: Thu, 22 Dec 2011 18:55:23 GMT
Expires: Thu, 01 Jan 1970 00:00:00 GMT
Set-Cookie: JSESSIONID=1uxr8b377s5xs;Path=/
【问题讨论】:
标签: objective-c cocoa apache cxf asihttprequest