gpt4 book ai didi

objective-c - ASIHttprequest 与 Apache CXF Restful Web 服务

转载 作者:行者123 更新时间:2023-12-03 17:59:29 26 4
gpt4 key购买 nike

我正在开发一个项目,涉及服务器端的 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 服务工作得很好。

我已经被这个问题困扰好几天了。任何建议将不胜感激!

如果有人想知道,服务器端为所有 Web 服务定义了一个根路径,因此在这种情况下不太可能成为问题。

*另一个编辑:*服务器端的请求/响应 header

[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=/

最佳答案

JAXBException 位于此 xml 命名空间中 (javax.xml.bind.JAXBException)。

您是否尝试将 JSON 解析为 XML?

关于objective-c - ASIHttprequest 与 Apache CXF Restful Web 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8608159/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com