为什么人工 URI 的 jsonix 解组失败
Why jsonix unmarshalling fails for artificial URIs
在我尝试使用我创建的模式文件时:ListMatchingProductsResponse.xsd, I run into an error similar to 但我不认为底层修复是相同的。
当我尝试解析 sample response:
var ListMatchingProductsResponse = require('/mappings/ListMatchingProductsResponse').ListMatchingProductsResponse;
var Jsonix = require('jsonix').Jsonix;
var context = new Jsonix.Context([ListMatchingProductsResponse]);
var unmarshaller = context.createUnmarshaller();
unmarshaller.unmarshalFile('sample-response.xml',
function (unmarshalled) {
console.log('unmarshalled:', unmarshalled);
});
});
我最终得到:
Uncaught Error:
Element [{http://mws.amazonservices.com/schema/Products/2011-10-01}ListMatchingProductsResponse]
could not be unmarshalled as is not known in this context
and the property does not allow DOM content.
我的怀疑:
到目前为止,我已经尝试过各种不智能的黑客攻击,但就是不明白这里的问题是什么。希望有更敏锐的眼光和理解力的人能有所帮助。
对我来说最明显的是 sample response
- 将
ListMatchingProductsResponse
与 http://mws.amazonservices.com/schema/Products/2011-10-01
命名空间联系起来
- 而我的模式将它与人工
http://localhost:8000/ListMatchingProductsResponse.xsd
命名空间相关联,因为我是创建模式并将 ListMatchingProductsResponse
定义为 complexType
. 的人
这是我在 运行 之后生成的 mappings/ListMatchingProductsResponse.js 文件的摘录:java -jar node_modules/jsonix/lib/jsonix-schema-compiler-full.jar -d mappings -p ListMatchingProductsResponse cache/xsd/localhost_8000/ListMatchingProductsResponse.xsd
{
localName: 'ListMatchingProductsResponse',
typeName: {
namespaceURI: 'http:\/\/localhost:8000\/ListMatchingProductsResponse.xsd',
localPart: 'ListMatchingProductsResponse'
},
我的试错尝试:
我真的不想更改响应,因为我真的无法控制它,但我摆弄它,看看是否可以通过将命名空间固定为我的人工命名空间来改变情况,但结果仍然相同错误...只是现在被抱怨的命名空间不同了:
Uncaught Error:
Element [{http://localhost:8000/ListMatchingProductsResponse.xsd}ListMatchingProductsResponse]
could not be unmarshalled as is not known in this context
and the property does not allow DOM content.
免责声明:我是Jsonix的作者。
我至少看到了一些问题。
首先,我在您的架构中没有看到元素声明。您正在尝试解组
ListMatchingProductsResponse
与 http://mws.amazonservices.com/schema/Products/2011-10-01
命名空间,但它在 your schema 中的何处声明?
接下来,您的架构 has http://localhost:8000/ListMatchingProductsResponse.xsd
as target namespace。您的元素具有 http://mws.amazonservices.com/schema/Products/2011-10-01
命名空间。这很可疑。我并不是说这是错误的(因为没有全局元素声明),但我猜你是在混合模式位置和命名空间 URI。
据我所知,您的架构不完整,您的 XML 与它不匹配。我可能是错的(我必须分析所有导入才能确定),但我认为您需要添加全局元素并检查名称空间。
在我尝试使用我创建的模式文件时:ListMatchingProductsResponse.xsd, I run into an error similar to
当我尝试解析 sample response:
var ListMatchingProductsResponse = require('/mappings/ListMatchingProductsResponse').ListMatchingProductsResponse;
var Jsonix = require('jsonix').Jsonix;
var context = new Jsonix.Context([ListMatchingProductsResponse]);
var unmarshaller = context.createUnmarshaller();
unmarshaller.unmarshalFile('sample-response.xml',
function (unmarshalled) {
console.log('unmarshalled:', unmarshalled);
});
});
我最终得到:
Uncaught Error:
Element [{http://mws.amazonservices.com/schema/Products/2011-10-01}ListMatchingProductsResponse]
could not be unmarshalled as is not known in this context
and the property does not allow DOM content.
我的怀疑:
到目前为止,我已经尝试过各种不智能的黑客攻击,但就是不明白这里的问题是什么。希望有更敏锐的眼光和理解力的人能有所帮助。
对我来说最明显的是 sample response
- 将
ListMatchingProductsResponse
与http://mws.amazonservices.com/schema/Products/2011-10-01
命名空间联系起来 - 而我的模式将它与人工
http://localhost:8000/ListMatchingProductsResponse.xsd
命名空间相关联,因为我是创建模式并将ListMatchingProductsResponse
定义为complexType
. 的人
这是我在 运行 之后生成的 mappings/ListMatchingProductsResponse.js 文件的摘录:java -jar node_modules/jsonix/lib/jsonix-schema-compiler-full.jar -d mappings -p ListMatchingProductsResponse cache/xsd/localhost_8000/ListMatchingProductsResponse.xsd
{
localName: 'ListMatchingProductsResponse',
typeName: {
namespaceURI: 'http:\/\/localhost:8000\/ListMatchingProductsResponse.xsd',
localPart: 'ListMatchingProductsResponse'
},
我的试错尝试:
我真的不想更改响应,因为我真的无法控制它,但我摆弄它,看看是否可以通过将命名空间固定为我的人工命名空间来改变情况,但结果仍然相同错误...只是现在被抱怨的命名空间不同了:
Uncaught Error:
Element [{http://localhost:8000/ListMatchingProductsResponse.xsd}ListMatchingProductsResponse]
could not be unmarshalled as is not known in this context
and the property does not allow DOM content.
免责声明:我是Jsonix的作者。
我至少看到了一些问题。
首先,我在您的架构中没有看到元素声明。您正在尝试解组
ListMatchingProductsResponse
与 http://mws.amazonservices.com/schema/Products/2011-10-01
命名空间,但它在 your schema 中的何处声明?
接下来,您的架构 has http://localhost:8000/ListMatchingProductsResponse.xsd
as target namespace。您的元素具有 http://mws.amazonservices.com/schema/Products/2011-10-01
命名空间。这很可疑。我并不是说这是错误的(因为没有全局元素声明),但我猜你是在混合模式位置和命名空间 URI。
据我所知,您的架构不完整,您的 XML 与它不匹配。我可能是错的(我必须分析所有导入才能确定),但我认为您需要添加全局元素并检查名称空间。