[Storage] Migrate azure-storage-queue to TypeSpec#49822
[Storage] Migrate azure-storage-queue to TypeSpec#49822gunjansingh-msft wants to merge 6 commits into
Conversation
|
Azure Pipelines: Successfully started running 1 pipeline(s). 35 pipeline(s) were filtered out due to trigger conditions. There may be pipelines that require an authorized user to comment /azp run to run. |
|
Azure Pipelines: Successfully started running 1 pipeline(s). 35 pipeline(s) were filtered out due to trigger conditions. There may be pipelines that require an authorized user to comment /azp run to run. |
There was a problem hiding this comment.
Pull request overview
Migrates azure-storage-queue from the legacy AutoRest/Swagger implementation to TypeSpec-based generation, while keeping the existing hand-written public client surface and adapting it to call into the generated protocol layer.
Changes:
- Introduces TypeSpec input wiring (
tsp-location.yaml) and TypeSpec metadata/property files for the module. - Refactors hand-written clients/builders to use
RequestOptions+ XMLBinaryDatabodies/responses against the generated protocol operations. - Adds a customization module to suppress generated public clients and to restore desired model/client behavior parity (fluent models, exception mapping, etc.).
Reviewed changes
Copilot reviewed 42 out of 45 changed files in this pull request and generated 5 comments.
Show a summary per file
| File | Description |
|---|---|
| sdk/storage/azure-storage-queue/tsp-location.yaml | Adds TypeSpec spec source location (currently fork-pinned). |
| sdk/storage/azure-storage-queue/src/test/java/com/azure/storage/queue/QueueTestBase.java | Normalizes URL/headers for playback matching with new protocol layer behavior. |
| sdk/storage/azure-storage-queue/src/main/resources/META-INF/azure-storage-queue-tsp_metadata.json | Adds TypeSpec cross-language API mapping metadata for generated protocol types. |
| sdk/storage/azure-storage-queue/src/main/resources/META-INF/azure-storage-queue_metadata.json | Adds updated cross-language metadata for the hand-written convenience surface. |
| sdk/storage/azure-storage-queue/src/main/resources/azure-storage-queue-tsp.properties | Adds TypeSpec-specific properties for metadata/versioning. |
| sdk/storage/azure-storage-queue/src/main/java/com/azure/storage/queue/QueueServiceClientBuilder.java | Updates builder to construct TypeSpec-backed protocol impl. |
| sdk/storage/azure-storage-queue/src/main/java/com/azure/storage/queue/QueueServiceClient.java | Refactors service client methods to use RequestOptions + XML BinaryData handling. |
| sdk/storage/azure-storage-queue/src/main/java/com/azure/storage/queue/QueueServiceAsyncClient.java | Refactors async service client to new protocol layer patterns. |
| sdk/storage/azure-storage-queue/src/main/java/com/azure/storage/queue/QueueClientBuilder.java | Updates queue builder to use queue-scoped base URL for protocol operations. |
| sdk/storage/azure-storage-queue/src/main/java/com/azure/storage/queue/QueueClient.java | Refactors queue client methods to new RequestOptions + XML serialization/deserialization. |
| sdk/storage/azure-storage-queue/src/main/java/com/azure/storage/queue/QueueAsyncClient.java | Refactors async queue client methods to new protocol layer patterns. |
| sdk/storage/azure-storage-queue/src/main/java/com/azure/storage/queue/package-info.java | Updates package documentation/header to TypeSpec generation. |
| sdk/storage/azure-storage-queue/src/main/java/com/azure/storage/queue/models/UserDelegationKey.java | Regenerates XML model parsing/shape for TypeSpec output. |
| sdk/storage/azure-storage-queue/src/main/java/com/azure/storage/queue/models/SendMessageResult.java | Regenerates XML model parsing/shape for TypeSpec output. |
| sdk/storage/azure-storage-queue/src/main/java/com/azure/storage/queue/models/QueueSignedIdentifier.java | Regenerates XML model parsing/shape for TypeSpec output. |
| sdk/storage/azure-storage-queue/src/main/java/com/azure/storage/queue/models/QueueServiceStatistics.java | Regenerates XML model parsing/shape for TypeSpec output. |
| sdk/storage/azure-storage-queue/src/main/java/com/azure/storage/queue/models/QueueServiceProperties.java | Regenerates XML model parsing/shape for TypeSpec output. |
| sdk/storage/azure-storage-queue/src/main/java/com/azure/storage/queue/models/QueueRetentionPolicy.java | Regenerates XML model parsing/shape for TypeSpec output. |
| sdk/storage/azure-storage-queue/src/main/java/com/azure/storage/queue/models/QueueMetrics.java | Regenerates XML model parsing/shape for TypeSpec output. |
| sdk/storage/azure-storage-queue/src/main/java/com/azure/storage/queue/models/QueueItem.java | Regenerates XML model parsing/shape for TypeSpec output. |
| sdk/storage/azure-storage-queue/src/main/java/com/azure/storage/queue/models/QueueCorsRule.java | Regenerates XML model parsing/shape for TypeSpec output. |
| sdk/storage/azure-storage-queue/src/main/java/com/azure/storage/queue/models/QueueAnalyticsLogging.java | Regenerates XML model parsing/shape for TypeSpec output. |
| sdk/storage/azure-storage-queue/src/main/java/com/azure/storage/queue/models/QueueAccessPolicy.java | Regenerates XML model parsing/shape for TypeSpec output. |
| sdk/storage/azure-storage-queue/src/main/java/com/azure/storage/queue/models/package-info.java | Updates models package documentation/header to TypeSpec generation. |
| sdk/storage/azure-storage-queue/src/main/java/com/azure/storage/queue/models/GeoReplicationStatus.java | Regenerates enum docs/header to TypeSpec generation. |
| sdk/storage/azure-storage-queue/src/main/java/com/azure/storage/queue/models/GeoReplication.java | Regenerates XML model parsing/shape for TypeSpec output. |
| sdk/storage/azure-storage-queue/src/main/java/com/azure/storage/queue/implementation/util/ModelHelper.java | Adds helpers for RequestOptions, metadata headers, XML (de)serialization, and paging conversion. |
| sdk/storage/azure-storage-queue/src/main/java/com/azure/storage/queue/implementation/package-info.java | Updates implementation package documentation/header to TypeSpec generation. |
| sdk/storage/azure-storage-queue/src/main/java/com/azure/storage/queue/implementation/models/SignedIdentifiers.java | Adds generated internal XML wrapper model for ACL responses. |
| sdk/storage/azure-storage-queue/src/main/java/com/azure/storage/queue/implementation/models/ReceivedMessages.java | Adds generated internal XML wrapper model for receive-messages responses. |
| sdk/storage/azure-storage-queue/src/main/java/com/azure/storage/queue/implementation/models/QueueMessageItemInternal.java | Regenerates internal received-message model to TypeSpec output (immutability/constructors). |
| sdk/storage/azure-storage-queue/src/main/java/com/azure/storage/queue/implementation/models/QueueMessage.java | Regenerates internal message body model to TypeSpec output (immutability/constructors). |
| sdk/storage/azure-storage-queue/src/main/java/com/azure/storage/queue/implementation/models/PeekedMessages.java | Adds generated internal XML wrapper model for peek-messages responses. |
| sdk/storage/azure-storage-queue/src/main/java/com/azure/storage/queue/implementation/models/PeekedMessageItemInternal.java | Regenerates internal peeked-message model to TypeSpec output (immutability/constructors). |
| sdk/storage/azure-storage-queue/src/main/java/com/azure/storage/queue/implementation/models/package-info.java | Updates implementation models package documentation/header. |
| sdk/storage/azure-storage-queue/src/main/java/com/azure/storage/queue/implementation/models/ListQueuesIncludeType.java | Adds generated internal enum for list-queues include values. |
| sdk/storage/azure-storage-queue/src/main/java/com/azure/storage/queue/implementation/models/ListOfSentMessage.java | Adds generated internal XML wrapper model for send-message responses. |
| sdk/storage/azure-storage-queue/src/main/java/com/azure/storage/queue/implementation/models/KeyInfo.java | Regenerates key info XML model (now OffsetDateTime-based) for TypeSpec. |
| sdk/storage/azure-storage-queue/src/main/java/com/azure/storage/queue/implementation/AzureQueueStorageImpl.java | Updates protocol client holder to TypeSpec generation and new service-version type. |
| sdk/storage/azure-storage-queue/customization/src/main/java/QueueStorageCustomizations.java | Adds TypeSpec customization to suppress generated public clients and patch generated shapes/behavior. |
| sdk/storage/azure-storage-queue/customization/pom.xml | Adds Maven module for running codegen customizations. |
| commit: e594f9e6853ec4044c9642948466d697c2fd8544 | ||
| repo: gunjansingh-msft/azure-rest-api-specs |
ibrandes
left a comment
There was a problem hiding this comment.
didn't get to a ton of files, but here's what i've found so far!
| public static QueueAccessPolicy fromXml(XmlReader xmlReader, String rootElementName) throws XMLStreamException { | ||
| String finalRootElementName | ||
| = rootElementName == null || rootElementName.isEmpty() ? "QueueAccessPolicy" : rootElementName; | ||
| = rootElementName == null || rootElementName.isEmpty() ? "AccessPolicy" : rootElementName; |
There was a problem hiding this comment.
should this be QueueAccessPolicy? my same question applies to all the other classes that have the name of the xml root element changed
There was a problem hiding this comment.
This default XML root name is the model's wire name, not the class name, the old generator used the class name (QueueAccessPolicy), the new one uses the wire name (AccessPolicy). They’re using the same thing in .Net too. do you want me to rename it here? https://github.com/Azure/azure-sdk-for-net/pull/57376/changes#diff-8a59c71ac5f8b0efd6abdb05f2cf5588376af419bbd3884cb2075734f30bab8cR49-R50
Summary
Migrates
azure-storage-queuefrom AutoRest/Swagger to TypeSpec codegen. The hand-written public clients (QueueClient/QueueServiceClientand async) are adapted to consume the generated protocol impl, and the generated impl reproduces AutoRest's 4-class topology (ServicesImpl/QueuesImpl/MessagesImpl/MessageIdsImpl).Key points
duplicate-client-nameerror that blocked the@@clientLocationsplit for Java was traced to the rust/goQueueClient extends Queueclient copying every Queue op; pinning those copies out of the java scope resolves it spec-only (see spec PR below). No public API change.QueueStorageExceptionInternaldefault in the customization so XML error deserialization keeps working.Validation (stock, unpatched TCGC 0.69 + typespec-java 0.45.4)
QueueErrorDeserializationTests)tsp-location.yamlpins a personal fork (gunjansingh-msft/azure-rest-api-specs). Must be re-pointed to the mergedAzure/azure-rest-api-specscommit once the spec PR lands: Storage Queue (data-plane): Java client customizations for TypeSpec migration azure-rest-api-specs#44686.Related
🤖 Generated with Claude Code