Каков корректный способ использовать тип Гуида в файле XSD?

Файл сохранен, несмотря на то, что ваше приложение не имеет READ / WRITE_EXTERNAL_STORAGE. Это связано с тем, что API Play Services запускаются в привилегированном процессе, отдельно от вашего приложения. Даже если у вашего приложения нет разрешений, Play Services может записывать файлы. К сожалению, выполнение в отдельном процессе не позволяет соседним соединениям записывать данные в хранилище вашего частного приложения. И это также означает, что, хотя вы не можете прочитать файл, вы по-прежнему отвечаете за его очистку, иначе он останется на диске бесконечно.

Чтобы объяснить больше о проблеме, из-за отсутствия разрешений вы не можете прочитать файл. Этот сбой кэшируется в тот момент, когда вы получаете onPayloadReceived. Я сообщу об ошибке, чтобы избежать кеширования ошибки, но потребуется много времени, чтобы исправить и отправить новый SDK. Обходные пути либо ...

  • Запросите разрешение раньше, чем файл будет отправлен на ваше устройство.
  • Найдите файл вручную через ~ / Downloads / Nearby / {payloadId}. Обратите внимание, что это не рекомендуется, поскольку путь к файлу может измениться в любое время (хотя это маловероятно). Это похоже на использование отражения.
25
задан erbi 27 March 2009 в 17:32
поделиться

3 ответа

Спасибо всем, я нашел, как удалить предупреждения.

Как sysrqb сказал, wsdl пространство имен было или удалено или никогда не существовало. Кажется, что инструмент xsd.exe знает определение Гуида внутренне, но это не может проверить xsd схему.

Как Банк Японии указал, единственный способ проверить схему с Гуидами в нем, к (ре), определяют тот тип в схеме. Прием здесь должен добавить тип Гуида к тому же пространству имен "http://microsoft.com/wsdl/types". Таким образом, xsd.exe сделает надлежащую ассоциацию между http://microsoft.com/wsdl/types:Guid и Системой. Гуид

Я сделал новый xsd файл для типа гуида:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
    targetNamespace="http://microsoft.com/wsdl/types/" >
    <xs:simpleType name="guid">
        <xs:annotation>
            <xs:documentation xml:lang="en">
                The representation of a GUID, generally the id of an element.
            </xs:documentation>
        </xs:annotation>
        <xs:restriction base="xs:string">
            <xs:pattern value="\{[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}\}"/>
        </xs:restriction>
    </xs:simpleType>
</xs:schema>

Затем я выполняю xsd.exe и с моим исходным xsd файлом и с этим новым xsd файлом:

xsd.exe myschema.xsd guid.xsd /c
42
ответ дан Community 28 November 2019 в 21:01
поделиться

Цитата отсюда:

   XmlSchema guidSchema = new XmlSchema();
   guidSchema.TargetNamespace = "http://microsoft.com/wsdl/types/";

   XmlSchemaSimpleTypeRestriction guidRestriction = new XmlSchemaSimpleTypeRestriction();
   guidRestriction.BaseTypeName = new XmlQualifiedName("string", XmlSchema.Namespace);

   XmlSchemaPatternFacet guidPattern = new XmlSchemaPatternFacet();
   guidPattern.Value = @"[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}";
   guidRestriction.Facets.Add(guidPattern);

   XmlSchemaSimpleType guidType = new XmlSchemaSimpleType();
   guidType.Name = "guid";
   guidType.Content = guidRestriction;
   guidSchema.Items.Add(guidType);

   schemaSet.Add(guidSchema);

   XmlSchema speakerSchema = new XmlSchema();
   speakerSchema.TargetNamespace = "http://www.microsoft.com/events/teched2005/";

   // ...

   XmlSchemaElement idElement = new XmlSchemaElement();
   idElement.Name = "ID";

   // Here's where the magic happens...

   idElement.SchemaTypeName = new XmlQualifiedName("guid", "http://microsoft.com/wsdl/types/");
3
ответ дан Lucero 28 November 2019 в 21:01
поделиться

Похоже, что wsdl страница расширения пространства имен была удалена, таким образом, это не может найти информацию о типе, Вам нужно.

1
ответ дан rmmh 28 November 2019 в 21:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: