first commit

This commit is contained in:
rajmohan4 2025-01-27 11:39:30 +05:30
commit ba95a18a33
66 changed files with 39868 additions and 0 deletions

25
.gitignore vendored Normal file
View File

@ -0,0 +1,25 @@
*target*
*.jar
*.war
*.ear
*.class
# eclipse specific git ignore
*.pydevproject
.project
.metadata
bin/**
*.tmp
*.bak
*~.nib
*~
*.swp
*.swo
.idea/**
.idea
local.properties
.classpath
.settings/
.loadpath

201
LICENSE Normal file
View File

@ -0,0 +1,201 @@
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "{}"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright {yyyy} {name of copyright owner}
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

37
README.md Normal file
View File

@ -0,0 +1,37 @@
# Java ONVIF (Open Network Video Interface Forum)
ONVIF is a community to standardize communication between IP-based security products (like cameras).
This project aims to improve https://github.com/milg0/onvif-java-lib.<br>
I've tried to convice its author to use to my code but it seems we have different objectives: my goal is to create a project that focus on the funny part of the development of an ONVIF application, **keeping the interaction with the WS as simple as possible** and delege that annoying part to Apache CXF in order to not waste the developer time in writing (and MAINTAINING) code that interacts with ONVIF web services.<br>
My wish is to help other developers willing to contribute to an enterprise-level Java library for ONVIF devices.
Apported improvements
=============
* Project **mavenization** and **modularization** (separation between Java stubs and application) and
* WS client generation using Apache CXF maven plugin (declaring the specific Onvif specification of each wsdl)
* maintainability and extendability of the overall code
* Separation of Test/examples from other code
Rebuilding WS stubs
=============
If you need to change the list of managed WSDLs (in onvif/onvif-ws-client/src/main/resources/wsdl) and thus you need to regenerate the WS Java stubs using the [Apache CXF codegen maven plugin](http://cxf.apache.org/docs/maven-cxf-codegen-plugin-wsdl-to-java.html), you need to go through the following steps:
1. **Download Onvif WSDLs** to onvif/onvif-ws-client/src/main/resources/wsdl appending the version before the .wsdl suffix.
For example, from main dir (onvif) use you can run the following shell commmand:<br>
```wget http://www.onvif.org/onvif/ver10/device/wsdl/devicemgmt.wsdl onvif-ws-client/src/main/resources/wsdl/devicemgmt_2.5.wsdl ```
1. **Update WSDLLocations constants (if needed)** within class *de.onvif.utils.WSDLLocations* (module onvif-java)
1. **Add required url-rewriting rules (if needed)** to onvif/onvif-ws-client/src/main/resources/wsdl/jax-ws-catalog.xml
1. Delete old Java classes in onvif/onvif-ws-client/src/main/java
1. **Run the class generation command**: decomment goal and phase of cxf-codegen-plugin in onvif-ws-client pom.xml and run ```mvn clean install```
1. To see how to properly add a new ONVIF service to OnvifDevice look into OnvifDevice.init()
TODOS
=============
My next goals are:
1. Create an active community of enthusiastic developers (the crazier you are, the better)
1. Write a more comprehensive examples (e.g. subscribe to an event notification, use I/O ports, etc...)
1. Create consistent Onvif specifications tags (at least for onvif-ws-client). For example: 2.4, 2.5, etc...
1. Fix WS-Discovery example (with my camera it doesn't work at all)
1. Write a simple UI to test the device functionalities
1. Fix offline mode (xml files in *local* folder)

598
intellij-style.xml Normal file
View File

@ -0,0 +1,598 @@
<?xml version="1.0" encoding="UTF-8"?>
<code_scheme name="GoogleStyle">
<option name="OTHER_INDENT_OPTIONS">
<value>
<option name="INDENT_SIZE" value="2"/>
<option name="CONTINUATION_INDENT_SIZE" value="4"/>
<option name="TAB_SIZE" value="2"/>
<option name="USE_TAB_CHARACTER" value="false"/>
<option name="SMART_TABS" value="false"/>
<option name="LABEL_INDENT_SIZE" value="0"/>
<option name="LABEL_INDENT_ABSOLUTE" value="false"/>
<option name="USE_RELATIVE_INDENTS" value="false"/>
</value>
</option>
<option name="INSERT_INNER_CLASS_IMPORTS" value="true"/>
<option name="CLASS_COUNT_TO_USE_IMPORT_ON_DEMAND" value="999"/>
<option name="NAMES_COUNT_TO_USE_IMPORT_ON_DEMAND" value="999"/>
<option name="PACKAGES_TO_USE_IMPORT_ON_DEMAND">
<value/>
</option>
<option name="IMPORT_LAYOUT_TABLE">
<value>
<package name="" withSubpackages="true" static="true"/>
<emptyLine/>
<package name="" withSubpackages="true" static="false"/>
</value>
</option>
<option name="RIGHT_MARGIN" value="100"/>
<option name="JD_ALIGN_PARAM_COMMENTS" value="false"/>
<option name="JD_ALIGN_EXCEPTION_COMMENTS" value="false"/>
<option name="JD_P_AT_EMPTY_LINES" value="false"/>
<option name="JD_KEEP_EMPTY_PARAMETER" value="false"/>
<option name="JD_KEEP_EMPTY_EXCEPTION" value="false"/>
<option name="JD_KEEP_EMPTY_RETURN" value="false"/>
<option name="KEEP_CONTROL_STATEMENT_IN_ONE_LINE" value="false"/>
<option name="KEEP_BLANK_LINES_BEFORE_RBRACE" value="0"/>
<option name="KEEP_BLANK_LINES_IN_CODE" value="1"/>
<option name="BLANK_LINES_AFTER_CLASS_HEADER" value="0"/>
<option name="ALIGN_MULTILINE_PARAMETERS" value="false"/>
<option name="ALIGN_MULTILINE_FOR" value="false"/>
<option name="CALL_PARAMETERS_WRAP" value="1"/>
<option name="METHOD_PARAMETERS_WRAP" value="1"/>
<option name="EXTENDS_LIST_WRAP" value="1"/>
<option name="THROWS_KEYWORD_WRAP" value="1"/>
<option name="METHOD_CALL_CHAIN_WRAP" value="1"/>
<option name="BINARY_OPERATION_WRAP" value="1"/>
<option name="BINARY_OPERATION_SIGN_ON_NEXT_LINE" value="true"/>
<option name="TERNARY_OPERATION_WRAP" value="1"/>
<option name="TERNARY_OPERATION_SIGNS_ON_NEXT_LINE" value="true"/>
<option name="FOR_STATEMENT_WRAP" value="1"/>
<option name="ARRAY_INITIALIZER_WRAP" value="1"/>
<option name="WRAP_COMMENTS" value="true"/>
<option name="IF_BRACE_FORCE" value="3"/>
<option name="DOWHILE_BRACE_FORCE" value="3"/>
<option name="WHILE_BRACE_FORCE" value="3"/>
<option name="FOR_BRACE_FORCE" value="3"/>
<option name="SPACE_BEFORE_ARRAY_INITIALIZER_LBRACE" value="true"/>
<AndroidXmlCodeStyleSettings>
<option name="USE_CUSTOM_SETTINGS" value="true"/>
<option name="LAYOUT_SETTINGS">
<value>
<option name="INSERT_BLANK_LINE_BEFORE_TAG" value="false"/>
</value>
</option>
</AndroidXmlCodeStyleSettings>
<JSCodeStyleSettings>
<option name="INDENT_CHAINED_CALLS" value="false"/>
</JSCodeStyleSettings>
<Python>
<option name="USE_CONTINUATION_INDENT_FOR_ARGUMENTS" value="true"/>
</Python>
<TypeScriptCodeStyleSettings>
<option name="INDENT_CHAINED_CALLS" value="false"/>
</TypeScriptCodeStyleSettings>
<XML>
<option name="XML_ALIGN_ATTRIBUTES" value="false"/>
<option name="XML_LEGACY_SETTINGS_IMPORTED" value="true"/>
</XML>
<codeStyleSettings language="CSS">
<indentOptions>
<option name="INDENT_SIZE" value="2"/>
<option name="CONTINUATION_INDENT_SIZE" value="4"/>
<option name="TAB_SIZE" value="2"/>
</indentOptions>
</codeStyleSettings>
<codeStyleSettings language="ECMA Script Level 4">
<option name="KEEP_BLANK_LINES_IN_CODE" value="1"/>
<option name="ALIGN_MULTILINE_PARAMETERS" value="false"/>
<option name="ALIGN_MULTILINE_FOR" value="false"/>
<option name="CALL_PARAMETERS_WRAP" value="1"/>
<option name="METHOD_PARAMETERS_WRAP" value="1"/>
<option name="EXTENDS_LIST_WRAP" value="1"/>
<option name="BINARY_OPERATION_WRAP" value="1"/>
<option name="BINARY_OPERATION_SIGN_ON_NEXT_LINE" value="true"/>
<option name="TERNARY_OPERATION_WRAP" value="1"/>
<option name="TERNARY_OPERATION_SIGNS_ON_NEXT_LINE" value="true"/>
<option name="FOR_STATEMENT_WRAP" value="1"/>
<option name="ARRAY_INITIALIZER_WRAP" value="1"/>
<option name="IF_BRACE_FORCE" value="3"/>
<option name="DOWHILE_BRACE_FORCE" value="3"/>
<option name="WHILE_BRACE_FORCE" value="3"/>
<option name="FOR_BRACE_FORCE" value="3"/>
<option name="PARENT_SETTINGS_INSTALLED" value="true"/>
</codeStyleSettings>
<codeStyleSettings language="HTML">
<indentOptions>
<option name="INDENT_SIZE" value="2"/>
<option name="CONTINUATION_INDENT_SIZE" value="4"/>
<option name="TAB_SIZE" value="2"/>
</indentOptions>
</codeStyleSettings>
<codeStyleSettings language="JAVA">
<option name="KEEP_CONTROL_STATEMENT_IN_ONE_LINE" value="false"/>
<option name="KEEP_BLANK_LINES_IN_CODE" value="1"/>
<option name="BLANK_LINES_AFTER_CLASS_HEADER" value="1"/>
<option name="ALIGN_MULTILINE_PARAMETERS" value="false"/>
<option name="ALIGN_MULTILINE_RESOURCES" value="false"/>
<option name="ALIGN_MULTILINE_FOR" value="false"/>
<option name="CALL_PARAMETERS_WRAP" value="1"/>
<option name="METHOD_PARAMETERS_WRAP" value="1"/>
<option name="EXTENDS_LIST_WRAP" value="1"/>
<option name="THROWS_KEYWORD_WRAP" value="1"/>
<option name="METHOD_CALL_CHAIN_WRAP" value="1"/>
<option name="BINARY_OPERATION_WRAP" value="1"/>
<option name="BINARY_OPERATION_SIGN_ON_NEXT_LINE" value="true"/>
<option name="TERNARY_OPERATION_WRAP" value="1"/>
<option name="TERNARY_OPERATION_SIGNS_ON_NEXT_LINE" value="true"/>
<option name="FOR_STATEMENT_WRAP" value="1"/>
<option name="ARRAY_INITIALIZER_WRAP" value="1"/>
<option name="WRAP_COMMENTS" value="true"/>
<option name="IF_BRACE_FORCE" value="3"/>
<option name="DOWHILE_BRACE_FORCE" value="3"/>
<option name="WHILE_BRACE_FORCE" value="3"/>
<option name="FOR_BRACE_FORCE" value="3"/>
<option name="PARENT_SETTINGS_INSTALLED" value="true"/>
<indentOptions>
<option name="INDENT_SIZE" value="2"/>
<option name="CONTINUATION_INDENT_SIZE" value="4"/>
<option name="TAB_SIZE" value="2"/>
</indentOptions>
</codeStyleSettings>
<codeStyleSettings language="JSON">
<indentOptions>
<option name="CONTINUATION_INDENT_SIZE" value="4"/>
<option name="TAB_SIZE" value="2"/>
</indentOptions>
</codeStyleSettings>
<codeStyleSettings language="JavaScript">
<option name="RIGHT_MARGIN" value="80"/>
<option name="KEEP_BLANK_LINES_IN_CODE" value="1"/>
<option name="ALIGN_MULTILINE_PARAMETERS" value="false"/>
<option name="ALIGN_MULTILINE_FOR" value="false"/>
<option name="CALL_PARAMETERS_WRAP" value="1"/>
<option name="METHOD_PARAMETERS_WRAP" value="1"/>
<option name="BINARY_OPERATION_WRAP" value="1"/>
<option name="BINARY_OPERATION_SIGN_ON_NEXT_LINE" value="true"/>
<option name="TERNARY_OPERATION_WRAP" value="1"/>
<option name="TERNARY_OPERATION_SIGNS_ON_NEXT_LINE" value="true"/>
<option name="FOR_STATEMENT_WRAP" value="1"/>
<option name="ARRAY_INITIALIZER_WRAP" value="1"/>
<option name="IF_BRACE_FORCE" value="3"/>
<option name="DOWHILE_BRACE_FORCE" value="3"/>
<option name="WHILE_BRACE_FORCE" value="3"/>
<option name="FOR_BRACE_FORCE" value="3"/>
<option name="PARENT_SETTINGS_INSTALLED" value="true"/>
<indentOptions>
<option name="INDENT_SIZE" value="2"/>
<option name="TAB_SIZE" value="2"/>
</indentOptions>
</codeStyleSettings>
<codeStyleSettings language="PROTO">
<option name="RIGHT_MARGIN" value="80"/>
<indentOptions>
<option name="INDENT_SIZE" value="2"/>
<option name="CONTINUATION_INDENT_SIZE" value="2"/>
<option name="TAB_SIZE" value="2"/>
</indentOptions>
</codeStyleSettings>
<codeStyleSettings language="protobuf">
<option name="RIGHT_MARGIN" value="80"/>
<indentOptions>
<option name="INDENT_SIZE" value="2"/>
<option name="CONTINUATION_INDENT_SIZE" value="2"/>
<option name="TAB_SIZE" value="2"/>
</indentOptions>
</codeStyleSettings>
<codeStyleSettings language="Python">
<option name="KEEP_BLANK_LINES_IN_CODE" value="1"/>
<option name="RIGHT_MARGIN" value="80"/>
<option name="ALIGN_MULTILINE_PARAMETERS" value="false"/>
<option name="PARENT_SETTINGS_INSTALLED" value="true"/>
<indentOptions>
<option name="INDENT_SIZE" value="2"/>
<option name="CONTINUATION_INDENT_SIZE" value="4"/>
<option name="TAB_SIZE" value="2"/>
</indentOptions>
</codeStyleSettings>
<codeStyleSettings language="SASS">
<indentOptions>
<option name="CONTINUATION_INDENT_SIZE" value="4"/>
<option name="TAB_SIZE" value="2"/>
</indentOptions>
</codeStyleSettings>
<codeStyleSettings language="SCSS">
<indentOptions>
<option name="CONTINUATION_INDENT_SIZE" value="4"/>
<option name="TAB_SIZE" value="2"/>
</indentOptions>
</codeStyleSettings>
<codeStyleSettings language="TypeScript">
<indentOptions>
<option name="INDENT_SIZE" value="2"/>
<option name="TAB_SIZE" value="2"/>
</indentOptions>
</codeStyleSettings>
<codeStyleSettings language="XML">
<indentOptions>
<option name="INDENT_SIZE" value="2"/>
<option name="CONTINUATION_INDENT_SIZE" value="2"/>
<option name="TAB_SIZE" value="2"/>
</indentOptions>
<arrangement>
<rules>
<section>
<rule>
<match>
<AND>
<NAME>xmlns:android</NAME>
<XML_ATTRIBUTE/>
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>xmlns:.*</NAME>
<XML_ATTRIBUTE/>
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
<order>BY_NAME</order>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:id</NAME>
<XML_ATTRIBUTE/>
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>style</NAME>
<XML_ATTRIBUTE/>
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*</NAME>
<XML_ATTRIBUTE/>
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
<order>BY_NAME</order>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:.*Style</NAME>
<XML_ATTRIBUTE/>
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
<order>BY_NAME</order>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:layout_width</NAME>
<XML_ATTRIBUTE/>
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:layout_height</NAME>
<XML_ATTRIBUTE/>
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:layout_weight</NAME>
<XML_ATTRIBUTE/>
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:layout_margin</NAME>
<XML_ATTRIBUTE/>
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:layout_marginTop</NAME>
<XML_ATTRIBUTE/>
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:layout_marginBottom</NAME>
<XML_ATTRIBUTE/>
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:layout_marginStart</NAME>
<XML_ATTRIBUTE/>
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:layout_marginEnd</NAME>
<XML_ATTRIBUTE/>
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:layout_marginLeft</NAME>
<XML_ATTRIBUTE/>
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:layout_marginRight</NAME>
<XML_ATTRIBUTE/>
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:layout_.*</NAME>
<XML_ATTRIBUTE/>
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
<order>BY_NAME</order>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:padding</NAME>
<XML_ATTRIBUTE/>
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:paddingTop</NAME>
<XML_ATTRIBUTE/>
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:paddingBottom</NAME>
<XML_ATTRIBUTE/>
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:paddingStart</NAME>
<XML_ATTRIBUTE/>
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:paddingEnd</NAME>
<XML_ATTRIBUTE/>
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:paddingLeft</NAME>
<XML_ATTRIBUTE/>
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:paddingRight</NAME>
<XML_ATTRIBUTE/>
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*</NAME>
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
<order>BY_NAME</order>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*</NAME>
<XML_NAMESPACE>http://schemas.android.com/apk/res-auto</XML_NAMESPACE>
</AND>
</match>
<order>BY_NAME</order>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*</NAME>
<XML_NAMESPACE>http://schemas.android.com/tools</XML_NAMESPACE>
</AND>
</match>
<order>BY_NAME</order>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*</NAME>
<XML_NAMESPACE>.*</XML_NAMESPACE>
</AND>
</match>
<order>BY_NAME</order>
</rule>
</section>
</rules>
</arrangement>
</codeStyleSettings>
<Objective-C>
<option name="INDENT_NAMESPACE_MEMBERS" value="0"/>
<option name="INDENT_C_STRUCT_MEMBERS" value="2"/>
<option name="INDENT_CLASS_MEMBERS" value="2"/>
<option name="INDENT_VISIBILITY_KEYWORDS" value="1"/>
<option name="INDENT_INSIDE_CODE_BLOCK" value="2"/>
<option name="KEEP_STRUCTURES_IN_ONE_LINE" value="true"/>
<option name="FUNCTION_PARAMETERS_WRAP" value="5"/>
<option name="FUNCTION_CALL_ARGUMENTS_WRAP" value="5"/>
<option name="TEMPLATE_CALL_ARGUMENTS_WRAP" value="5"/>
<option name="TEMPLATE_CALL_ARGUMENTS_ALIGN_MULTILINE" value="true"/>
<option name="ALIGN_INIT_LIST_IN_COLUMNS" value="false"/>
<option name="SPACE_BEFORE_SUPERCLASS_COLON" value="false"/>
</Objective-C>
<Objective-C-extensions>
<option name="GENERATE_INSTANCE_VARIABLES_FOR_PROPERTIES" value="ASK"/>
<option name="RELEASE_STYLE" value="IVAR"/>
<option name="TYPE_QUALIFIERS_PLACEMENT" value="BEFORE"/>
<file>
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Import"/>
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Macro"/>
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Typedef"/>
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Enum"/>
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Constant"/>
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Global"/>
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Struct"/>
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="FunctionPredecl"/>
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Function"/>
</file>
<class>
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Property"/>
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Synthesize"/>
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="InitMethod"/>
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="StaticMethod"/>
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="InstanceMethod"/>
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="DeallocMethod"/>
</class>
<extensions>
<pair source="cc" header="h"/>
<pair source="c" header="h"/>
</extensions>
</Objective-C-extensions>
<codeStyleSettings language="ObjectiveC">
<option name="RIGHT_MARGIN" value="80"/>
<option name="KEEP_BLANK_LINES_BEFORE_RBRACE" value="1"/>
<option name="BLANK_LINES_BEFORE_IMPORTS" value="0"/>
<option name="BLANK_LINES_AFTER_IMPORTS" value="0"/>
<option name="BLANK_LINES_AROUND_CLASS" value="0"/>
<option name="BLANK_LINES_AROUND_METHOD" value="0"/>
<option name="BLANK_LINES_AROUND_METHOD_IN_INTERFACE" value="0"/>
<option name="ALIGN_MULTILINE_BINARY_OPERATION" value="false"/>
<option name="BINARY_OPERATION_SIGN_ON_NEXT_LINE" value="true"/>
<option name="FOR_STATEMENT_WRAP" value="1"/>
<option name="ASSIGNMENT_WRAP" value="1"/>
<indentOptions>
<option name="INDENT_SIZE" value="2"/>
<option name="CONTINUATION_INDENT_SIZE" value="4"/>
</indentOptions>
</codeStyleSettings>
</code_scheme>

133
onvif-java/pom.xml Normal file
View File

@ -0,0 +1,133 @@
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.onvif</groupId>
<artifactId>onvif</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>onvif-java</artifactId>
<dependencies>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-ws-security</artifactId>
<version>${cxf.version}</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http</artifactId>
<version>${cxf.version}</version>
</dependency>
<!-- <dependency> -->
<!-- <groupId>org.apache.cxf.services.ws-discovery</groupId> -->
<!-- <artifactId>cxf-services-ws-discovery-api</artifactId> -->
<!-- <version>${cxf.version}</version> -->
<!-- </dependency> -->
<!-- <dependency> -->
<!-- <groupId>org.apache.cxf.services.ws-discovery</groupId> -->
<!-- <artifactId>cxf-services-ws-discovery-service</artifactId> -->
<!-- <version>${cxf.version}</version> -->
<!-- </dependency> -->
<dependency>
<groupId>org.onvif</groupId>
<artifactId>onvif-ws-client</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.7</version>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.10</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.4</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.sun.xml.messaging.saaj/saaj-impl -->
<!-- For Discovery -->
<dependency>
<groupId>com.sun.xml.messaging.saaj</groupId>
<artifactId>saaj-impl</artifactId>
<version>1.5.1</version>
</dependency>
<!-- For discovery using cxf -->
<!-- https://mvnrepository.com/artifact/org.apache.cxf.services.ws-discovery/cxf-services-ws-discovery-api -->
<!--
<dependency>
<groupId>org.apache.cxf.services.ws-discovery</groupId>
<artifactId>cxf-services-ws-discovery-api</artifactId>
<version>${cxf.version}</version>
</dependency>
-->
<!-- Java 9+ javax dependencies start -->
<dependency>
<groupId>com.sun.activation</groupId>
<artifactId>javax.activation</artifactId>
<version>${javax.activation.version}</version>
</dependency>
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>${jaxb.api.version}</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-core</artifactId>
<version>2.3.0.1</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>${jaxb.api.version}</version>
</dependency>
<!-- Java 9+ javax dependencies end -->
<!-- LOGGINBG... for testing -->
<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-simple -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.7.26</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>javax.xml.soap</groupId>
<artifactId>javax.xml.soap-api</artifactId>
<version>1.4.0</version>
</dependency>
</dependencies>
<!--
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>${maven-compiler-plugin.version}</version>
<configuration>
<release>${java.release}</release>
</configuration>
</plugin>
</plugins>
</build>
-->
</project>

View File

@ -0,0 +1,79 @@
package de.onvif.beans;
public class DeviceInfo {
private String manufacturer;
private String model;
private String firmwareVersion;
private String serialNumber;
private String hardwareId;
public DeviceInfo(
String manufacturer,
String model,
String firmwareVersion,
String serialNumber,
String hardwareId) {
super();
this.manufacturer = manufacturer;
this.model = model;
this.firmwareVersion = firmwareVersion;
this.serialNumber = serialNumber;
this.hardwareId = hardwareId;
}
@Override
public String toString() {
return "DeviceInfo [manufacturer="
+ manufacturer
+ ", model="
+ model
+ ", firmwareVersion="
+ firmwareVersion
+ ", serialNumber="
+ serialNumber
+ ", hardwareId="
+ hardwareId
+ "]";
}
public String getManufacturer() {
return manufacturer;
}
public void setManufacturer(String manufacturer) {
this.manufacturer = manufacturer;
}
public String getModel() {
return model;
}
public void setModel(String model) {
this.model = model;
}
public String getFirmwareVersion() {
return firmwareVersion;
}
public void setFirmwareVersion(String firmwareVersion) {
this.firmwareVersion = firmwareVersion;
}
public String getSerialNumber() {
return serialNumber;
}
public void setSerialNumber(String serialNumber) {
this.serialNumber = serialNumber;
}
public String getHardwareId() {
return hardwareId;
}
public void setHardwareId(String hardwareId) {
this.hardwareId = hardwareId;
}
}

View File

@ -0,0 +1,252 @@
package de.onvif.discovery;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.Inet4Address;
import java.net.Inet6Address;
import java.net.InetAddress;
import java.net.InterfaceAddress;
import java.net.MalformedURLException;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.net.SocketTimeoutException;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.security.SecureRandom;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Comparator;
import java.util.Enumeration;
import java.util.List;
import java.util.Random;
import java.util.TreeSet;
import java.util.UUID;
import java.util.concurrent.ConcurrentSkipListSet;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
import javax.xml.soap.MessageFactory;
import javax.xml.soap.MimeHeaders;
import javax.xml.soap.SOAPBody;
import javax.xml.soap.SOAPException;
import javax.xml.soap.SOAPMessage;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
/**
* Device discovery class to list local accessible devices probed per UDP probe messages.
*
* @author th
* @version 0.1
* @date 2015-06-18
*/
@SuppressWarnings({"unused", "UseOfSystemOutOrSystemErr", "CallToPrintStackTrace"})
public class DeviceDiscovery {
public static final String WS_DISCOVERY_SOAP_VERSION = "SOAP 1.2 Protocol";
public static final String WS_DISCOVERY_CONTENT_TYPE = "application/soap+xml";
public static final int WS_DISCOVERY_TIMEOUT = 4000;
public static final int WS_DISCOVERY_PORT = 3702;
public static final String WS_DISCOVERY_ADDRESS_IPv4 = "239.255.255.250";
/** IPv6 not supported yet. set enableIPv6 to true for testing if you need IP6 discovery. */
public static final boolean enableIPv6 = false;
public static final String WS_DISCOVERY_ADDRESS_IPv6 = "[FF02::C]";
public static final String WS_DISCOVERY_PROBE_MESSAGE =
"<soap:Envelope xmlns:soap=\"http://www.w3.org/2003/05/soap-envelope\" xmlns:wsa=\"http://schemas.xmlsoap.org/ws/2004/08/addressing\" xmlns:tns=\"http://schemas.xmlsoap.org/ws/2005/04/discovery\"><soap:Header><wsa:Action>http://schemas.xmlsoap.org/ws/2005/04/discovery/Probe</wsa:Action><wsa:MessageID>urn:uuid:c032cfdd-c3ca-49dc-820e-ee6696ad63e2</wsa:MessageID><wsa:To>urn:schemas-xmlsoap-org:ws:2005:04:discovery</wsa:To></soap:Header><soap:Body><tns:Probe/></soap:Body></soap:Envelope>";
private static final Random random = new SecureRandom();
public static void main(String[] args) throws InterruptedException {
for (URL url : discoverWsDevicesAsUrls()) {
System.out.println("Device discovered: " + url.toString());
}
}
/**
* Discover WS device on the local network and returns Urls
*
* @return list of unique device urls
*/
public static Collection<URL> discoverWsDevicesAsUrls() {
return discoverWsDevicesAsUrls("", "");
}
/**
* Discover WS device on the local network with specified filter
*
* @param regexpProtocol url protocol matching regexp like "^http$", might be empty ""
* @param regexpPath url path matching regexp like "onvif", might be empty ""
* @return list of unique device urls filtered
*/
public static Collection<URL> discoverWsDevicesAsUrls(String regexpProtocol, String regexpPath) {
final Collection<URL> urls =
new TreeSet<>(
new Comparator<URL>() {
public int compare(URL o1, URL o2) {
return o1.toString().compareTo(o2.toString());
}
});
for (String key : discoverWsDevices()) {
try {
final URL url = new URL(key);
boolean ok = true;
if (regexpProtocol.length() > 0 && !url.getProtocol().matches(regexpProtocol)) ok = false;
if (regexpPath.length() > 0 && !url.getPath().matches(regexpPath)) ok = false;
// ignore ip6 hosts
if (ok && !enableIPv6 && url.getHost().startsWith("[")) ok = false;
if (ok) urls.add(url);
} catch (MalformedURLException e) {
e.printStackTrace();
}
}
return urls;
}
/**
* Discover WS device on the local network
*
* @return list of unique devices access strings which might be URLs in most cases
*/
public static Collection<String> discoverWsDevices() {
final Collection<String> addresses = new ConcurrentSkipListSet<>();
final CountDownLatch serverStarted = new CountDownLatch(1);
final CountDownLatch serverFinished = new CountDownLatch(1);
final Collection<InetAddress> addressList = new ArrayList<>();
try {
final Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();
if (interfaces != null) {
while (interfaces.hasMoreElements()) {
NetworkInterface anInterface = interfaces.nextElement();
if (!anInterface.isLoopback()) {
final List<InterfaceAddress> interfaceAddresses = anInterface.getInterfaceAddresses();
for (InterfaceAddress address : interfaceAddresses) {
Class clz = address.getAddress().getClass();
if (!enableIPv6 && address.getAddress() instanceof Inet6Address) continue;
addressList.add(address.getAddress());
}
}
}
}
} catch (SocketException e) {
e.printStackTrace();
}
ExecutorService executorService = Executors.newCachedThreadPool();
for (final InetAddress address : addressList) {
Runnable runnable =
new Runnable() {
public void run() {
try {
final String uuid = UUID.randomUUID().toString();
final String probe =
WS_DISCOVERY_PROBE_MESSAGE.replaceAll(
"<wsa:MessageID>urn:uuid:.*</wsa:MessageID>",
"<wsa:MessageID>urn:uuid:" + uuid + "</wsa:MessageID>");
final int port = random.nextInt(20000) + 40000;
@SuppressWarnings("SocketOpenedButNotSafelyClosed")
final DatagramSocket server = new DatagramSocket(port, address);
new Thread() {
public void run() {
try {
final DatagramPacket packet = new DatagramPacket(new byte[4096], 4096);
server.setSoTimeout(WS_DISCOVERY_TIMEOUT);
long timerStarted = System.currentTimeMillis();
while (System.currentTimeMillis() - timerStarted < (WS_DISCOVERY_TIMEOUT)) {
serverStarted.countDown();
server.receive(packet);
final Collection<String> collection =
parseSoapResponseForUrls(
Arrays.copyOf(packet.getData(), packet.getLength()));
for (String key : collection) {
addresses.add(key);
}
}
} catch (SocketTimeoutException ignored) {
} catch (Exception e) {
e.printStackTrace();
} finally {
serverFinished.countDown();
server.close();
}
}
}.start();
try {
serverStarted.await(1000, TimeUnit.MILLISECONDS);
} catch (InterruptedException e) {
e.printStackTrace();
}
if (address instanceof Inet4Address) {
server.send(
new DatagramPacket(
probe.getBytes(StandardCharsets.UTF_8),
probe.length(),
InetAddress.getByName(WS_DISCOVERY_ADDRESS_IPv4),
WS_DISCOVERY_PORT));
} else {
if (address instanceof Inet6Address) {
if (enableIPv6)
server.send(
new DatagramPacket(
probe.getBytes(StandardCharsets.UTF_8),
probe.length(),
InetAddress.getByName(WS_DISCOVERY_ADDRESS_IPv6),
WS_DISCOVERY_PORT));
} else {
assert (false); // unknown network type.. ignore or warn developer
}
}
} catch (Exception e) {
e.printStackTrace();
}
try {
serverFinished.await((WS_DISCOVERY_TIMEOUT), TimeUnit.MILLISECONDS);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
executorService.submit(runnable);
}
try {
executorService.shutdown();
executorService.awaitTermination(WS_DISCOVERY_TIMEOUT + 2000, TimeUnit.MILLISECONDS);
} catch (InterruptedException ignored) {
}
return addresses;
}
private static Collection<Node> getNodeMatching(Node body, String regexp) {
final Collection<Node> nodes = new ArrayList<>();
if (body.getNodeName().matches(regexp)) nodes.add(body);
if (body.getChildNodes().getLength() == 0) return nodes;
NodeList returnList = body.getChildNodes();
for (int k = 0; k < returnList.getLength(); k++) {
final Node node = returnList.item(k);
nodes.addAll(getNodeMatching(node, regexp));
}
return nodes;
}
private static Collection<String> parseSoapResponseForUrls(byte[] data)
throws SOAPException, IOException {
// System.out.println(new String(data));
final Collection<String> urls = new ArrayList<>();
MessageFactory factory = MessageFactory.newInstance(WS_DISCOVERY_SOAP_VERSION);
final MimeHeaders headers = new MimeHeaders();
headers.addHeader("Content-type", WS_DISCOVERY_CONTENT_TYPE);
SOAPMessage message = factory.createMessage(headers, new ByteArrayInputStream(data));
SOAPBody body = message.getSOAPBody();
for (Node node : getNodeMatching(body, ".*:XAddrs")) {
if (node.getTextContent().length() > 0) {
urls.addAll(Arrays.asList(node.getTextContent().split(" ")));
}
}
return urls;
}
}

View File

@ -0,0 +1,15 @@
package de.onvif.discovery;
import java.net.URL;
import java.util.Collection;
/**
* @author th
* @date 2015-06-18
*/
public class OnvifDiscovery {
public static Collection<URL> discoverOnvifURLs() {
return DeviceDiscovery.discoverWsDevicesAsUrls("^http$", ".*onvif.*");
}
}

View File

@ -0,0 +1,92 @@
package de.onvif.soap;
import java.security.GeneralSecurityException;
import java.security.SecureRandom;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.Map;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.KeyManager;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import javax.xml.ws.BindingProvider;
import org.apache.cxf.configuration.jsse.TLSClientParameters;
import org.apache.cxf.transport.http.HTTPConduit;
public class NaiveSSLHelper {
public static void makeWebServiceClientTrustEveryone(Object webServicePort) {
if (webServicePort instanceof BindingProvider) {
BindingProvider bp = (BindingProvider) webServicePort;
Map requestContext = bp.getRequestContext();
requestContext.put(JAXWS_SSL_SOCKET_FACTORY, getTrustingSSLSocketFactory());
requestContext.put(JAXWS_HOSTNAME_VERIFIER, new NaiveHostnameVerifier());
} else {
throw new IllegalArgumentException(
"Web service port "
+ webServicePort.getClass().getName()
+ " does not implement "
+ BindingProvider.class.getName());
}
}
public static SSLSocketFactory getTrustingSSLSocketFactory() {
return SSLSocketFactoryHolder.INSTANCE;
}
private static SSLSocketFactory createSSLSocketFactory() {
TrustManager[] trustManagers = new TrustManager[] {new NaiveTrustManager()};
SSLContext sslContext;
try {
sslContext = SSLContext.getInstance("TLS");
sslContext.init(new KeyManager[0], trustManagers, new SecureRandom());
return sslContext.getSocketFactory();
} catch (GeneralSecurityException e) {
return null;
}
}
public static void makeCxfWebServiceClientTrustEveryone(HTTPConduit http) {
TrustManager[] trustManagers = new TrustManager[] {new NaiveTrustManager()};
TLSClientParameters tlsParams = new TLSClientParameters();
tlsParams.setSecureSocketProtocol("TLS");
tlsParams.setKeyManagers(new KeyManager[0]);
tlsParams.setTrustManagers(trustManagers);
tlsParams.setDisableCNCheck(true);
http.setTlsClientParameters(tlsParams);
}
private interface SSLSocketFactoryHolder {
SSLSocketFactory INSTANCE = createSSLSocketFactory();
}
private static class NaiveHostnameVerifier implements HostnameVerifier {
@Override
public boolean verify(String hostName, SSLSession session) {
return true;
}
}
private static class NaiveTrustManager implements X509TrustManager {
@Override
public void checkClientTrusted(X509Certificate[] certs, String authType)
throws CertificateException {}
@Override
public void checkServerTrusted(X509Certificate[] certs, String authType)
throws CertificateException {}
@Override
public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[0];
}
}
private static final java.lang.String JAXWS_HOSTNAME_VERIFIER =
"com.sun.xml.internal.ws.transport.https.client.hostname.verifier";
private static final java.lang.String JAXWS_SSL_SOCKET_FACTORY =
"com.sun.xml.internal.ws.transport.https.client.SSLSocketFactory";
}

View File

@ -0,0 +1,362 @@
package de.onvif.soap;
import de.onvif.beans.DeviceInfo;
import java.net.ConnectException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;
import java.util.concurrent.TimeUnit;
import javax.xml.soap.SOAPException;
import javax.xml.ws.BindingProvider;
import javax.xml.ws.Holder;
import org.apache.cxf.binding.soap.Soap12;
import org.apache.cxf.binding.soap.SoapBindingConfiguration;
import org.apache.cxf.endpoint.Client;
import org.apache.cxf.frontend.ClientProxy;
import org.apache.cxf.interceptor.LoggingInInterceptor;
import org.apache.cxf.interceptor.LoggingOutInterceptor;
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
import org.apache.cxf.transport.http.HTTPConduit;
import org.apache.cxf.transports.http.configuration.HTTPClientPolicy;
import org.onvif.ver10.device.wsdl.Device;
import org.onvif.ver10.device.wsdl.DeviceService;
import org.onvif.ver10.events.wsdl.EventPortType;
import org.onvif.ver10.events.wsdl.EventService;
import org.onvif.ver10.media.wsdl.Media;
import org.onvif.ver10.media.wsdl.MediaService;
import org.onvif.ver10.recording.wsdl.RecordingPort;
import org.onvif.ver10.recording.wsdl.RecordingService;
import org.onvif.ver10.replay.wsdl.ReplayPort;
import org.onvif.ver10.replay.wsdl.ReplayService;
import org.onvif.ver10.schema.Capabilities;
import org.onvif.ver10.schema.CapabilityCategory;
import org.onvif.ver10.schema.DateTime;
import org.onvif.ver10.schema.MediaUri;
import org.onvif.ver10.schema.SetDateTimeType;
import org.onvif.ver10.schema.StreamSetup;
import org.onvif.ver10.schema.StreamType;
import org.onvif.ver10.schema.Transport;
import org.onvif.ver10.schema.TransportProtocol;
import org.onvif.ver20.imaging.wsdl.ImagingPort;
import org.onvif.ver20.imaging.wsdl.ImagingService;
import org.onvif.ver20.ptz.wsdl.PTZ;
import org.onvif.ver20.ptz.wsdl.PtzService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.onvif.ver10.device.wsdl.GetNetworkProtocolsResponse;
import org.onvif.ver10.schema.NetworkProtocol;
/**
* @author Robin Dick
* @author Modified by Brad Lowe
*/
public class OnvifDevice {
private static final Logger logger = LoggerFactory.getLogger(OnvifDevice.class);
private static final String DEVICE_SERVICE = "/onvif/device_service";
private static final String RECORDING_SERVICE = "/onvif/recording_service";
private static final String REPLAY_SERVICE = "/onvif/replay_service";
private final URL url; // Example http://host:port, https://host, http://host, http://ip_address
private Device device;
private Media media;
private RecordingPort recordings;
private ReplayPort replay;
private PTZ ptz;
private ImagingPort imaging;
private EventPortType events;
private static boolean verbose = false; // enable/disable logging of SOAP messages
final SimpleSecurityHandler securityHandler;
private static URL cleanURL(URL u) throws ConnectException {
if (u == null) throw new ConnectException("null url not allowed");
String f = u.getFile();
if (!f.isEmpty()) {
String out = u.toString().replace(f, "");
try {
return new URL(out);
} catch (MalformedURLException e) {
throw new ConnectException("MalformedURLException " + u);
}
}
return u;
}
/*
* @param url is http://host or http://host:port or https://host or https://host:port
* @param user Username you need to login, or "" for none
* @param password User's password to login, or "" for none
*/
public OnvifDevice(URL url, String user, String password) throws ConnectException, SOAPException {
this.url = cleanURL(url);
securityHandler =
!user.isEmpty() && !password.isEmpty() ? new SimpleSecurityHandler(user, password) : null;
init();
}
/**
* Initializes an Onvif device, e.g. a Network Video Transmitter (NVT) with logindata.
*
* @param deviceIp The IP address or host name of your device, you can also add a port
* @param user Username you need to login
* @param password User's password to login
* @throws ConnectException Exception gets thrown, if device isn't accessible or invalid and
* doesn't answer to SOAP messages
* @throws SOAPException
*/
public OnvifDevice(String deviceIp, String user, String password)
throws ConnectException, SOAPException, MalformedURLException {
this(
deviceIp.startsWith("http") ? new URL(deviceIp) : new URL("http://" + deviceIp),
user,
password);
}
/**
* Initializes an Onvif device, e.g. a Network Video Transmitter (NVT) with logindata.
*
* @param hostIp The IP address of your device, you can also add a port but noch protocol (e.g.
* http://)
* @throws ConnectException Exception gets thrown, if device isn't accessible or invalid and
* doesn't answer to SOAP messages
* @throws SOAPException
*/
public OnvifDevice(String hostIp) throws ConnectException, SOAPException, MalformedURLException {
this(hostIp, null, null);
}
/**
* Initalizes the addresses used for SOAP messages and to get the internal IP, if given IP is a
* proxy.
*
* @throws ConnectException Get thrown if device doesn't give answers to GetCapabilities()
* @throws SOAPException
*/
protected void init() throws ConnectException, SOAPException {
DeviceService deviceService = new DeviceService(null, DeviceService.SERVICE);
BindingProvider deviceServicePort = (BindingProvider) deviceService.getDevicePort();
this.device =
getServiceProxy(deviceServicePort, url.toString() + DEVICE_SERVICE).create(Device.class);
RecordingService recordingService = new RecordingService();
BindingProvider recServicePort = (BindingProvider) recordingService.getRecordingPort();
this.recordings = getServiceProxy(recServicePort,url.toString() + RECORDING_SERVICE).create(RecordingPort.class);
ReplayService replayService = new ReplayService();
BindingProvider replayServicePort = (BindingProvider) replayService.getReplayPort();
this.replay = getServiceProxy(replayServicePort,url.toString() + REPLAY_SERVICE).create(ReplayPort.class);
Capabilities capabilities = this.device.getCapabilities(Arrays.asList(CapabilityCategory.ALL));
if (capabilities == null) {
throw new ConnectException("Capabilities not reachable.");
}
if (capabilities.getMedia() != null && capabilities.getMedia().getXAddr() != null) {
this.media = new MediaService().getMediaPort();
this.media =
getServiceProxy((BindingProvider) media, capabilities.getMedia().getXAddr())
.create(Media.class);
}
if (capabilities.getPTZ() != null && capabilities.getPTZ().getXAddr() != null) {
this.ptz = new PtzService().getPtzPort();
this.ptz =
getServiceProxy((BindingProvider) ptz, capabilities.getPTZ().getXAddr())
.create(PTZ.class);
}
if (capabilities.getImaging() != null && capabilities.getImaging().getXAddr() != null) {
this.imaging = new ImagingService().getImagingPort();
this.imaging =
getServiceProxy((BindingProvider) imaging, capabilities.getImaging().getXAddr())
.create(ImagingPort.class);
}
if (capabilities.getEvents() != null && capabilities.getEvents().getXAddr() != null) {
this.events = new EventService().getEventPort();
this.events =
getServiceProxy((BindingProvider) events, capabilities.getEvents().getXAddr())
.create(EventPortType.class);
}
}
public JaxWsProxyFactoryBean getServiceProxy(BindingProvider servicePort, String serviceAddr) {
JaxWsProxyFactoryBean proxyFactory = new JaxWsProxyFactoryBean();
proxyFactory.getHandlers();
if (serviceAddr != null) proxyFactory.setAddress(serviceAddr);
proxyFactory.setServiceClass(servicePort.getClass());
SoapBindingConfiguration config = new SoapBindingConfiguration();
config.setVersion(Soap12.getInstance());
proxyFactory.setBindingConfig(config);
Client deviceClient = ClientProxy.getClient(servicePort);
if (verbose) {
// these logging interceptors are depreciated, but should be fine for debugging/development
// use.
proxyFactory.getOutInterceptors().add(new LoggingOutInterceptor());
proxyFactory.getInInterceptors().add(new LoggingInInterceptor());
}
HTTPConduit http = (HTTPConduit) deviceClient.getConduit();
if (securityHandler != null) proxyFactory.getHandlers().add(securityHandler);
HTTPClientPolicy httpClientPolicy = http.getClient();
httpClientPolicy.setConnectionTimeout(36000);
httpClientPolicy.setReceiveTimeout(32000);
httpClientPolicy.setAllowChunking(false);
return proxyFactory;
}
public void resetSystemDateAndTime() {
Calendar calendar = Calendar.getInstance();
Date currentDate = new Date();
boolean daylightSavings = calendar.getTimeZone().inDaylightTime(currentDate);
org.onvif.ver10.schema.TimeZone timeZone = new org.onvif.ver10.schema.TimeZone();
timeZone.setTZ(displayTimeZone(calendar.getTimeZone()));
org.onvif.ver10.schema.Time time = new org.onvif.ver10.schema.Time();
time.setHour(calendar.get(Calendar.HOUR_OF_DAY));
time.setMinute(calendar.get(Calendar.MINUTE));
time.setSecond(calendar.get(Calendar.SECOND));
org.onvif.ver10.schema.Date date = new org.onvif.ver10.schema.Date();
date.setYear(calendar.get(Calendar.YEAR));
date.setMonth(calendar.get(Calendar.MONTH) + 1);
date.setDay(calendar.get(Calendar.DAY_OF_MONTH));
org.onvif.ver10.schema.DateTime utcDateTime = new org.onvif.ver10.schema.DateTime();
utcDateTime.setDate(date);
utcDateTime.setTime(time);
device.setSystemDateAndTime(SetDateTimeType.MANUAL, daylightSavings, timeZone, utcDateTime);
}
private static String displayTimeZone(TimeZone tz) {
long hours = TimeUnit.MILLISECONDS.toHours(tz.getRawOffset());
long minutes =
TimeUnit.MILLISECONDS.toMinutes(tz.getRawOffset()) - TimeUnit.HOURS.toMinutes(hours);
// avoid -4:-30 issue
minutes = Math.abs(minutes);
String result = "";
if (hours > 0) {
result = String.format("GMT+%02d:%02d", hours, minutes);
} else {
result = String.format("GMT%02d:%02d", hours, minutes);
}
return result;
}
/** Is used for basic devices and requests of given Onvif Device */
public Device getDevice() {
return device;
}
public RecordingPort getRecording(){
return recordings;
}
public ReplayPort getReplay(){
return replay;
}
public PTZ getPtz() {
return ptz;
}
public Media getMedia() {
return media;
}
// public RecordingPort getRecording(){return recordings;}
public ImagingPort getImaging() {
return imaging;
}
public EventPortType getEvents() {
return events;
}
public DateTime getDate() {
return device.getSystemDateAndTime().getLocalDateTime();
}
public DeviceInfo getDeviceInfo() {
Holder<String> manufacturer = new Holder<>();
Holder<String> model = new Holder<>();
Holder<String> firmwareVersion = new Holder<>();
Holder<String> serialNumber = new Holder<>();
Holder<String> hardwareId = new Holder<>();
device.getDeviceInformation(manufacturer, model, firmwareVersion, serialNumber, hardwareId);
return new DeviceInfo(
manufacturer.value,
model.value,
firmwareVersion.value,
serialNumber.value,
hardwareId.value);
}
public String getHostname() {
return device.getHostname().getName();
}
public String reboot() throws ConnectException, SOAPException {
return device.systemReboot();
}
// returns http://host[:port]/path_for_snapshot
public String getSnapshotUri(String profileToken) {
MediaUri sceenshotUri = media.getSnapshotUri(profileToken);
if (sceenshotUri != null) {
return sceenshotUri.getUri();
}
return "";
}
public String getSnapshotUri() {
return getSnapshotUri(0);
}
public String getStreamUri() {
return getStreamUri(0);
}
// Get snapshot uri for profile with index
public String getSnapshotUri(int index) {
if (media.getProfiles().size() >= index)
return getSnapshotUri(media.getProfiles().get(index).getToken());
return "";
}
public String getStreamUri(int index) {
return getStreamUri(media.getProfiles().get(index).getToken());
}
// returns rtsp://host[:port]/path_for_rtsp
public String getStreamUri(String profileToken) {
StreamSetup streamSetup = new StreamSetup();
Transport t = new Transport();
t.setProtocol(TransportProtocol.RTSP);
streamSetup.setTransport(t);
streamSetup.setStream(StreamType.RTP_UNICAST);
MediaUri rtsp = media.getStreamUri(streamSetup, profileToken);
return rtsp != null ? rtsp.getUri() : "";
}
public static boolean isVerbose() {
return verbose;
}
public static void setVerbose(boolean verbose) {
OnvifDevice.verbose = verbose;
}
}

View File

@ -0,0 +1,282 @@
package de.onvif.soap;
/** @author schrepfler */
import java.security.GeneralSecurityException;
import java.security.SecureRandom;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
/**
* This class provide various static methods that relax X509 certificate and hostname verification
* while using the SSL over the HTTP protocol.
*
* @author Francis Labrie
*/
public final class SSLUtilities {
/**
* Hostname verifier for the Sun's deprecated API.
*
* @deprecated see {@link #_hostnameVerifier}.
*/
private static HostnameVerifier __hostnameVerifier;
/**
* Thrust managers for the Sun's deprecated API.
*
* @deprecated see {@link #_trustManagers}.
*/
private static TrustManager[] __trustManagers;
/** Hostname verifier. */
private static HostnameVerifier _hostnameVerifier;
/** Thrust managers. */
private static TrustManager[] _trustManagers;
/**
* Set the default Hostname Verifier to an instance of a fake class that trust all hostnames. This
* method uses the old deprecated API from the com.sun.ssl package.
*
* @deprecated see {@link #_trustAllHostnames()}.
*/
private static void __trustAllHostnames() {
// Create a trust manager that does not validate certificate chains
if (__hostnameVerifier == null) {
__hostnameVerifier = new _FakeHostnameVerifier();
} // if
// Install the all-trusting host name verifier
HttpsURLConnection.setDefaultHostnameVerifier(__hostnameVerifier);
} // __trustAllHttpsCertificates
/**
* Set the default X509 Trust Manager to an instance of a fake class that trust all certificates,
* even the self-signed ones. This method uses the old deprecated API from the com.sun.ssl
* package.
*
* @deprecated see {@link #_trustAllHttpsCertificates()}.
*/
private static void __trustAllHttpsCertificates() {
SSLContext context;
// Create a trust manager that does not validate certificate chains
if (__trustManagers == null) {
__trustManagers = new TrustManager[] {new _FakeX509TrustManager()};
} // if
// Install the all-trusting trust manager
try {
context = SSLContext.getInstance("SSL");
context.init(null, __trustManagers, new SecureRandom());
} catch (GeneralSecurityException gse) {
throw new IllegalStateException(gse.getMessage());
} // catch
HttpsURLConnection.setDefaultSSLSocketFactory(context.getSocketFactory());
} // __trustAllHttpsCertificates
/**
* Return true if the protocol handler property java. protocol.handler.pkgs is set to the Sun's
* com.sun.net.ssl. internal.www.protocol deprecated one, false otherwise.
*
* @return true if the protocol handler property is set to the Sun's deprecated one, false
* otherwise.
*/
private static boolean isDeprecatedSSLProtocol() {
return ("com.sun.net.ssl.internal.www.protocol"
.equals(System.getProperty("java.protocol.handler.pkgs")));
} // isDeprecatedSSLProtocol
/** Set the default Hostname Verifier to an instance of a fake class that trust all hostnames. */
private static void _trustAllHostnames() {
// Create a trust manager that does not validate certificate chains
if (_hostnameVerifier == null) {
_hostnameVerifier = new FakeHostnameVerifier();
} // if
// Install the all-trusting host name verifier:
HttpsURLConnection.setDefaultHostnameVerifier(_hostnameVerifier);
} // _trustAllHttpsCertificates
/**
* Set the default X509 Trust Manager to an instance of a fake class that trust all certificates,
* even the self-signed ones.
*/
private static void _trustAllHttpsCertificates() {
SSLContext context;
// Create a trust manager that does not validate certificate chains
if (_trustManagers == null) {
_trustManagers = new TrustManager[] {new FakeX509TrustManager()};
} // if
// Install the all-trusting trust manager:
try {
context = SSLContext.getInstance("SSL");
context.init(null, _trustManagers, new SecureRandom());
} catch (GeneralSecurityException gse) {
throw new IllegalStateException(gse.getMessage());
} // catch
HttpsURLConnection.setDefaultSSLSocketFactory(context.getSocketFactory());
} // _trustAllHttpsCertificates
/** Set the default Hostname Verifier to an instance of a fake class that trust all hostnames. */
public static void trustAllHostnames() {
// Is the deprecated protocol setted?
if (isDeprecatedSSLProtocol()) {
__trustAllHostnames();
} else {
_trustAllHostnames();
} // else
} // trustAllHostnames
/**
* Set the default X509 Trust Manager to an instance of a fake class that trust all certificates,
* even the self-signed ones.
*/
public static void trustAllHttpsCertificates() {
// Is the deprecated protocol setted?
if (isDeprecatedSSLProtocol()) {
__trustAllHttpsCertificates();
} else {
_trustAllHttpsCertificates();
} // else
} // trustAllHttpsCertificates
/**
* This class implements a fake hostname verificator, trusting any host name. This class uses the
* old deprecated API from the com.sun. ssl package.
*
* @author Francis Labrie
* @deprecated see {@link SSLUtilities.FakeHostnameVerifier}.
*/
public static class _FakeHostnameVerifier implements HostnameVerifier {
/**
* Always return true, indicating that the host name is an acceptable match with the server's
* authentication scheme.
*
* @param hostname the host name.
* @param session the SSL session used on the connection to host.
* @return the true boolean value indicating the host name is trusted.
*/
public boolean verify(String hostname, SSLSession session) {
return (true);
}
} // _FakeHostnameVerifier
/**
* This class allow any X509 certificates to be used to authenticate the remote side of a secure
* socket, including self-signed certificates. This class uses the old deprecated API from the
* com.sun.ssl package.
*
* @author Francis Labrie
* @deprecated see {@link SSLUtilities.FakeX509TrustManager}.
*/
public static class _FakeX509TrustManager implements X509TrustManager {
/** Empty array of certificate authority certificates. */
private static final X509Certificate[] _AcceptedIssuers = new X509Certificate[] {};
/**
* Always return true, trusting for client SSL chain peer certificate chain.
*
* @param chain the peer certificate chain.
* @return the true boolean value indicating the chain is trusted.
*/
public boolean isClientTrusted(X509Certificate[] chain) {
return (true);
} // checkClientTrusted
/**
* Always return true, trusting for server SSL chain peer certificate chain.
*
* @param chain the peer certificate chain.
* @return the true boolean value indicating the chain is trusted.
*/
public boolean isServerTrusted(X509Certificate[] chain) {
return (true);
} // checkServerTrusted
/**
* Return an empty array of certificate authority certificates which are trusted for
* authenticating peers.
*
* @return a empty array of issuer certificates.
*/
public X509Certificate[] getAcceptedIssuers() {
return (_AcceptedIssuers);
} // getAcceptedIssuers
public void checkClientTrusted(X509Certificate[] arg0, String arg1)
throws CertificateException {
throw new UnsupportedOperationException("Not supported yet.");
}
public void checkServerTrusted(X509Certificate[] arg0, String arg1)
throws CertificateException {
throw new UnsupportedOperationException("Not supported yet.");
}
} // _FakeX509TrustManager
/**
* This class implements a fake hostname verificator, trusting any host name.
*
* @author Francis Labrie
*/
public static class FakeHostnameVerifier implements HostnameVerifier {
/**
* Always return true, indicating that the host name is an acceptable match with the server's
* authentication scheme.
*
* @param hostname the host name.
* @param session the SSL session used on the connection to host.
* @return the true boolean value indicating the host name is trusted.
*/
public boolean verify(String hostname, SSLSession session) {
return (true);
} // verify
} // FakeHostnameVerifier
/**
* This class allow any X509 certificates to be used to authenticate the remote side of a secure
* socket, including self-signed certificates.
*
* @author Francis Labrie
*/
public static class FakeX509TrustManager implements X509TrustManager {
/** Empty array of certificate authority certificates. */
private static final X509Certificate[] _AcceptedIssuers = new X509Certificate[] {};
/**
* Always trust for client SSL chain peer certificate chain with any authType authentication
* types.
*
* @param chain the peer certificate chain.
* @param authType the authentication type based on the client certificate.
*/
public void checkClientTrusted(
X509Certificate[] chain, String authType) {} // checkClientTrusted
/**
* Always trust for server SSL chain peer certificate chain with any authType exchange algorithm
* types.
*
* @param chain the peer certificate chain.
* @param authType the key exchange algorithm used.
*/
public void checkServerTrusted(
X509Certificate[] chain, String authType) {} // checkServerTrusted
/**
* Return an empty array of certificate authority certificates which are trusted for
* authenticating peers.
*
* @return a empty array of issuer certificates.
*/
public X509Certificate[] getAcceptedIssuers() {
return (_AcceptedIssuers);
} // getAcceptedIssuers
} // FakeX509TrustManager
} // SSLUtilities

View File

@ -0,0 +1,172 @@
package de.onvif.soap;
import static org.apache.wss4j.common.WSS4JConstants.BASE64_ENCODING;
import static org.apache.wss4j.common.WSS4JConstants.CREATED_LN;
import static org.apache.wss4j.common.WSS4JConstants.NONCE_LN;
import static org.apache.wss4j.common.WSS4JConstants.PASSWORD_DIGEST;
import static org.apache.wss4j.common.WSS4JConstants.PASSWORD_LN;
import static org.apache.wss4j.common.WSS4JConstants.PASSWORD_TYPE_ATTR;
import static org.apache.wss4j.common.WSS4JConstants.USERNAME_LN;
import static org.apache.wss4j.common.WSS4JConstants.USERNAME_TOKEN_LN;
import static org.apache.wss4j.common.WSS4JConstants.WSSE_LN;
import static org.apache.wss4j.common.WSS4JConstants.WSSE_NS;
import static org.apache.wss4j.common.WSS4JConstants.WSSE_PREFIX;
import static org.apache.wss4j.common.WSS4JConstants.WSU_NS;
import static org.apache.wss4j.common.WSS4JConstants.WSU_PREFIX;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.Random;
import java.util.Set;
import java.util.SimpleTimeZone;
import java.util.TimeZone;
import javax.xml.namespace.QName;
import javax.xml.soap.SOAPElement;
import javax.xml.soap.SOAPEnvelope;
import javax.xml.soap.SOAPHeader;
import javax.xml.soap.SOAPMessage;
import javax.xml.soap.SOAPPart;
import javax.xml.ws.handler.MessageContext;
import javax.xml.ws.handler.soap.SOAPHandler;
import javax.xml.ws.handler.soap.SOAPMessageContext;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.codec.digest.MessageDigestAlgorithms;
/*
Utility class to add user/password onvif credentials to SOAP communications
*/
public class SimpleSecurityHandler implements SOAPHandler<SOAPMessageContext> {
private final String username;
private final String password;
private String utcTime;
private static Random rnd = new SecureRandom();
public SimpleSecurityHandler(String username, String password) {
this.username = username;
this.password = password;
}
public byte[] generateNonce(int length) {
byte[] nonceBytes = new byte[length];
// fill byte[]
rnd.nextBytes(nonceBytes);
return nonceBytes;
}
public String encryptPassword(String password, byte[] nonceBytes) {
String digestBase64 = "";
try {
// 1. Base64 decode the nonce
byte[] decodedNonce = nonceBytes;
// 2. Concatenate decodedNonce, date, and password
byte[] dateBytes = getUTCTime().getBytes();
byte[] passwordBytes = password.getBytes();
byte[] toBeHashed = new byte[decodedNonce.length + dateBytes.length + passwordBytes.length];
System.arraycopy(decodedNonce, 0, toBeHashed, 0, decodedNonce.length);
System.arraycopy(dateBytes, 0, toBeHashed, decodedNonce.length, dateBytes.length);
System.arraycopy(passwordBytes, 0, toBeHashed, decodedNonce.length + dateBytes.length, passwordBytes.length);
// 3. SHA-1 hash the concatenated bytes
MessageDigest digest = MessageDigest.getInstance("SHA-1");
byte[] sha1Hash = digest.digest(toBeHashed);
// 4. Base64 encode the SHA-1 hash
digestBase64 = java.util.Base64.getEncoder().encodeToString(sha1Hash);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return digestBase64;
}
@Override
public boolean handleMessage(final SOAPMessageContext msgCtx) {
byte[] nonceBytes = generateNonce(16);
// Indicator telling us which direction this message is going in
final Boolean outInd = (Boolean) msgCtx.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);
// Handler must only add security headers to outbound messages
if (outInd.booleanValue()) {
try {
// Create the xml
SOAPMessage soapMessage = msgCtx.getMessage();
SOAPEnvelope envelope = soapMessage.getSOAPPart().getEnvelope();
SOAPHeader header = envelope.getHeader();
if (header == null) {
header = envelope.addHeader();
}
SOAPPart sp = soapMessage.getSOAPPart();
SOAPEnvelope se = sp.getEnvelope();
se.addNamespaceDeclaration(WSSE_PREFIX, WSSE_NS);
se.addNamespaceDeclaration(WSU_PREFIX, WSU_NS);
SOAPElement securityElem = header.addChildElement(WSSE_LN, WSSE_PREFIX);
// securityElem.setAttribute("SOAP-ENV:mustUnderstand", "1");
SOAPElement usernameTokenElem =
securityElem.addChildElement(USERNAME_TOKEN_LN, WSSE_PREFIX);
SOAPElement usernameElem = usernameTokenElem.addChildElement(USERNAME_LN, WSSE_PREFIX);
usernameElem.setTextContent(username);
SOAPElement passwordElem = usernameTokenElem.addChildElement(PASSWORD_LN, WSSE_PREFIX);
passwordElem.setAttribute(PASSWORD_TYPE_ATTR, PASSWORD_DIGEST);
passwordElem.setTextContent(encryptPassword(password, nonceBytes));
SOAPElement nonceElem = usernameTokenElem.addChildElement(NONCE_LN, WSSE_PREFIX);
nonceElem.setAttribute("EncodingType", BASE64_ENCODING);
nonceElem.setTextContent(Base64.encodeBase64String(nonceBytes));
SOAPElement createdElem = usernameTokenElem.addChildElement(CREATED_LN, WSU_PREFIX);
createdElem.setTextContent(getLastUTCTime());
} catch (final Exception e) {
e.printStackTrace();
return false;
}
}
return true;
}
public String getLastUTCTime() {
return utcTime;
}
public String getUTCTime() {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-d'T'HH:mm:ss'Z'");
sdf.setTimeZone(new SimpleTimeZone(SimpleTimeZone.UTC_TIME, "UTC"));
Calendar cal = new GregorianCalendar(TimeZone.getTimeZone("UTC"));
String utcTime = sdf.format(cal.getTime());
this.utcTime = utcTime;
return utcTime;
}
@Override
public boolean handleFault(SOAPMessageContext context) {
// TODO Auto-generated method stub
return false;
}
@Override
public void close(MessageContext context) {
// TODO Auto-generated method stub
}
@Override
public Set<QName> getHeaders() {
// TODO Auto-generated method stub
return null;
}
}

View File

@ -0,0 +1,68 @@
package de.onvif.utils;
import org.onvif.ver10.schema.PTZPreset;
import org.onvif.ver10.schema.PTZStatus;
import org.onvif.ver10.schema.PTZVector;
public class OnvifUtils {
public static String format(PTZVector vector) {
String out = "";
if (vector != null) {
out += "[" + vector.getPanTilt().getX() + "," + vector.getPanTilt().getY();
if (vector.getZoom() != null) out += "," + vector.getZoom().getX();
out += "]";
}
return out;
}
public static String format(PTZPreset preset) {
String out = "";
if (preset != null) {
out += preset.getToken() + "/" + preset.getName() + ":" + format(preset.getPTZPosition());
}
return out;
}
public static String format(PTZStatus status) {
String out = "";
if (status != null) {
out +=
"moveStatus="
+ format(status.getMoveStatus())
+ " position="
+ format(status.getPosition())
+ " time="
+ status.getUtcTime();
}
return out;
}
public static String format(Object o) {
String out = "";
if (o != null) {
out = o.toString();
for (; ; ) {
int ch = out.indexOf("org.onvif.ver");
if (ch == -1) break;
int end = out.indexOf("[", ch);
if (end == -1) {
assert (false);
break;
} //
int at = out.indexOf("@", ch);
if (at == -1 || at > end) {
assert (false);
break;
}
out = out.substring(0, ch) + out.substring(end);
}
out = out.replaceAll("<null>", ""); // speed=<null>,foo=bar to just speed=,foo=bar
// out += preset.getToken()+"/"+preset.getName()+":"+format(preset.getPTZPosition());
}
return out;
}
}

View File

@ -0,0 +1,7 @@
# Root logger option
log4j.rootLogger=INFO, stdout
# Direct log messages to stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

View File

@ -0,0 +1,40 @@
package org.onvif.client;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Base64;
public class AuthTest {
public static void main(String[] args) throws Exception {
String date = "2024-03-06T06:04:30Z";
String nonce = "gHV4Y/cV8KE7OSY7+qGv0g==";
String password = "abcd1234";
try {
// 1. Base64 decode the nonce
byte[] decodedNonce = Base64.getDecoder().decode(nonce);
// 2. Concatenate decodedNonce, date, and password
byte[] dateBytes = date.getBytes();
byte[] passwordBytes = password.getBytes();
byte[] toBeHashed = new byte[decodedNonce.length + dateBytes.length + passwordBytes.length];
System.arraycopy(decodedNonce, 0, toBeHashed, 0, decodedNonce.length);
System.arraycopy(dateBytes, 0, toBeHashed, decodedNonce.length, dateBytes.length);
System.arraycopy(passwordBytes, 0, toBeHashed, decodedNonce.length + dateBytes.length, passwordBytes.length);
// 3. SHA-1 hash the concatenated bytes
MessageDigest digest = MessageDigest.getInstance("SHA-1");
byte[] sha1Hash = digest.digest(toBeHashed);
// 4. Base64 encode the SHA-1 hash
String digestBase64 = Base64.getEncoder().encodeToString(sha1Hash);
System.out.println("Digest: " + digestBase64);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
}
}

View File

@ -0,0 +1,28 @@
package org.onvif.client;
import java.util.Base64;
public class Base64Test {
public static void main(String[] args) {
String base64String = "4AUTXXJ214OBnsdeYBXatQ==";
// decode Base64
byte[] decodedBytes = Base64.getDecoder().decode(base64String);
// turn byte[] to hex
StringBuilder hexStringBuilder = new StringBuilder();
for (byte b : decodedBytes) {
String hex = Integer.toHexString(0xff & b);
if (hex.length() == 1) {
hexStringBuilder.append('0');
}
hexStringBuilder.append(hex);
}
String hexString = hexStringBuilder.toString();
System.out.println("hex" + hexString);
}
}

View File

@ -0,0 +1,74 @@
package org.onvif.client;
import de.onvif.discovery.OnvifDiscovery;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.net.URL;
import java.util.ArrayList;
import java.util.Collection;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Class calls OnvifDiscovery and for each device URL found, calls TestDevice This assumes all onvif
* devices on your network use the same username and password.
*
* @author Brad Lowe
*/
public class DiscoverAndTest {
private static final Logger LOG = LoggerFactory.getLogger(TestDevice.class);
public static String discoverAndTest(String user, String password) {
String sep = "\n";
StringBuffer out = new StringBuffer();
Collection<URL> urls = OnvifDiscovery.discoverOnvifURLs();
for (URL u : urls) {
out.append("Discovered URL:" + u.toString() + sep);
}
ArrayList<String> results = new ArrayList<>();
int good = 0, bad = 0;
for (URL u : urls) {
try {
String result = TestDevice.testCamera(u, user, password);
LOG.info(u + "->" + result);
good++;
results.add(u.toString() + ":" + result);
} catch (Throwable e) {
bad++;
LOG.error("error:" + u, e);
// This is a bit of a hack. When a camera is password protected (it should be!)
// and the password is not provided or wrong, a "Unable to Send Message" exception
// may be thrown. This is not clear-- buried in the stack track is the real cause.
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
e.printStackTrace(pw);
String trace = sw.getBuffer().toString();
if (trace.contains("Unauthorized")) results.add(u + ":Unauthorized:");
else results.add(u + ":" + trace);
}
}
out.append("RESULTS: " + sep);
for (String s : results) out.append(s + sep);
out.append("cameras found:" + urls.size() + " good=" + good + ", bad=" + bad + sep);
return out.toString();
}
public static void main(String[] args) {
// get user and password.. we will ignore device host
String user = "";
String password = "";
if (args.length > 0) user = args[0];
if (args.length > 1) password = args[1];
if (password.isEmpty()) {
LOG.warn(
"Warning: No password for discover and test... run with common user password as arguments");
}
// OnvifDevice.setVerbose(true);
LOG.info(discoverAndTest(user, password));
}
}

View File

@ -0,0 +1,18 @@
package org.onvif.client;
import de.onvif.discovery.OnvifDiscovery;
import java.net.URL;
import java.util.Collection;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class DiscoveryTest {
private static final Logger LOG = LoggerFactory.getLogger(DiscoveryTest.class);
public static void main(String[] args) {
Collection<URL> urls = OnvifDiscovery.discoverOnvifURLs();
for (URL u : urls) {
LOG.info(u.toString());
}
}
}

View File

@ -0,0 +1,132 @@
package org.onvif.client;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.util.Scanner;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class GetTestDevice {
static String PROPERTY_NAME = "ONVIF_HOST";
private static final Logger LOG = LoggerFactory.getLogger(GetTestDevice.class);
// Get a camera host, user name, and password for tests.
// Add an environment variable or java Property called "TEST_CAM" and set to
// host,user,password,profile
// or modify resource/onvif.properties
public static OnvifCredentials getOnvifCredentials(String[] args) {
OnvifCredentials creds = getFromArgs(args);
if (creds != null)
return creds;
creds = getFromProperties();
if (creds != null)
return creds;
try {
creds = getFirstFromResource("/onvif.properties");
if (creds != null)
return creds;
} catch (IOException ioe) {
LOG.error("Error", ioe);
}
try {
creds = getFromStandardInput();
if (creds != null)
return creds;
} catch (IOException ioe) {
LOG.error("Error", ioe);
}
LOG.info("Unable to get default test onvif credentials");
return new OnvifCredentials("", "", "", "");
}
// arguments to any test app can be host user password profilename
// if no arguments passed, returns null.
// All arguments optional.
public static OnvifCredentials getFromArgs(String[] args) {
if (args == null || args.length == 0)
return null;
String host = "", user = "", password = "", profile = "";
host = args[0];
if (args.length > 1)
user = args[1];
if (args.length > 2)
password = args[2];
if (args.length > 3)
profile = args[3];
return new OnvifCredentials(host, user, password, profile);
}
public static OnvifCredentials getFromProperties() {
String test = null;
if (test == null)
test = System.getProperty(PROPERTY_NAME);
if (test == null)
test = System.getenv(PROPERTY_NAME);
if (test != null) {
return parse(test);
}
return null;
}
private static OnvifCredentials getFromStandardInput() throws IOException {
System.out.println("Getting camera credentials from standard input");
InputStreamReader inputStream = new InputStreamReader(System.in, StandardCharsets.UTF_8);
BufferedReader keyboardInput = new BufferedReader(inputStream);
System.out.println("Please enter camera IP (with port if not 80):");
String cameraAddress = keyboardInput.readLine();
System.out.println("Please enter camera username:");
String user = keyboardInput.readLine();
System.out.println("Please enter camera password:");
String password = keyboardInput.readLine();
System.out.println("Please enter camera profile [or enter to use first]:");
String profile = keyboardInput.readLine();
OnvifCredentials creds = new OnvifCredentials(cameraAddress, user, password, profile);
return creds;
}
private static OnvifCredentials getFirstFromResource(String resource) throws IOException {
InputStream res = GetTestDevice.class.getResourceAsStream(resource);
if (res != null) {
try (Scanner s = new Scanner(res, StandardCharsets.UTF_8.name());) {
s.useDelimiter("\\A");
while (s.hasNextLine()) {
String line = s.nextLine();
if (!line.isEmpty() && !line.startsWith("#"))
return parse(line.substring(line.indexOf("=") + 1));
}
}
}
return null;
}
// warning, this breaks if password contains a comma.
public static OnvifCredentials parse(String i) {
String host = "", user = "", password = "", profile = "";
if (i != null) {
if (i.contains(",")) {
String[] sp = i.split(",");
if (sp.length > 0)
host = sp[0];
if (sp.length > 1)
user = sp[1];
if (sp.length > 2)
password = sp[2];
if (sp.length > 3)
profile = sp[3];
} else
host = i;
}
return new OnvifCredentials(host, user, password, profile);
}
}

View File

@ -0,0 +1,150 @@
package org.onvif.client;
import javax.xml.soap.*;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.security.MessageDigest;
import java.util.Base64;
public class ONVIFClient {
private String deviceUrl;
private String username;
private String password;
private String realm;
private String nonce;
private String uri;
public ONVIFClient(String deviceUrl, String username, String password) {
this.deviceUrl = deviceUrl;
this.username = username;
this.password = password;
this.uri = "/onvif/device_service"; // Set to your ONVIF service URI
}
public void getDeviceInfo() {
try {
// Step 1: Send initial request to get authentication details
URL url = new URL(deviceUrl + uri);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("POST");
connection.setDoOutput(true);
connection.setRequestProperty("Content-Type", "text/xml;charset=UTF-8");
// Get response and parse WWW-Authenticate header
int responseCode = connection.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_UNAUTHORIZED) {
String authHeader = connection.getHeaderField("WWW-Authenticate");
parseAuthHeader(authHeader);
// Step 2: Calculate the digest
String digest = calculateDigest();
// Step 3: Send the actual request with Digest Auth
connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("POST");
connection.setDoOutput(true);
connection.setRequestProperty("Content-Type", "text/xml;charset=UTF-8");
connection.setRequestProperty("Authorization", "Digest " + digest);
// Create SOAP Request
SOAPMessage soapMessage = createSOAPRequest();
soapMessage.saveChanges();
soapMessage.writeTo(connection.getOutputStream());
// Get the response
responseCode = connection.getResponseCode();
System.out.println("Response Code: " + responseCode);
if (responseCode == HttpURLConnection.HTTP_OK) {
SOAPMessage responseMessage = MessageFactory.newInstance().createMessage(null, connection.getInputStream());
System.out.println("Response SOAP Message:");
responseMessage.writeTo(System.out);
} else {
System.out.println("Error in SOAP request: " + connection.getResponseMessage());
}
} else {
System.out.println("Unexpected response: " + responseCode);
}
} catch (Exception e) {
e.printStackTrace();
}
}
private void parseAuthHeader(String authHeader) {
String[] params = authHeader.split(", ");
for (String param : params) {
String[] keyValue = param.split("=");
if (keyValue.length == 2) {
switch (keyValue[0].trim()) {
case "realm":
this.realm = keyValue[1].replace("\"", "");
break;
case "nonce":
this.nonce = keyValue[1].replace("\"", "");
break;
}
}
}
}
private String calculateDigest() throws Exception {
String method = "POST";
String uri = this.uri;
String nc = "00000001"; // nonce count
String cnonce = "abc123"; // client nonce
String qop = "auth";
// Hashing required values
MessageDigest md = MessageDigest.getInstance("MD5");
// A1 = MD5(username:realm:password)
String A1 = username + ":" + realm + ":" + password;
String ha1 = bytesToHex(md.digest(A1.getBytes()));
// A2 = MD5(method:uri)
String A2 = method + ":" + uri;
String ha2 = bytesToHex(md.digest(A2.getBytes()));
// Response = MD5(ha1:nonce:nc:cnonce:qop:ha2)
String response = ha1 + ":" + nonce + ":" + nc + ":" + cnonce + ":" + qop + ":" + ha2;
String digest = bytesToHex(md.digest(response.getBytes()));
return String.format("username=\"%s\", realm=\"%s\", nonce=\"%s\", uri=\"%s\", response=\"%s\", qop=%s, nc=%s, cnonce=\"%s\"",
username, realm, nonce, uri, digest, qop, nc, cnonce);
}
private String bytesToHex(byte[] bytes) {
StringBuilder sb = new StringBuilder();
for (byte b : bytes) {
sb.append(String.format("%02x", b));
}
return sb.toString();
}
private SOAPMessage createSOAPRequest() throws SOAPException {
// Create SOAP Message
MessageFactory messageFactory = MessageFactory.newInstance();
SOAPMessage soapMessage = messageFactory.createMessage();
SOAPPart soapPart = soapMessage.getSOAPPart();
// Create SOAP Envelope
SOAPEnvelope envelope = soapPart.getEnvelope();
envelope.addNamespaceDeclaration("tns", "http://www.onvif.org/ver10/device/wsdl");
// Create SOAP Body
SOAPBody soapBody = envelope.getBody();
soapBody.addChildElement("GetDeviceInformation", "tns");
return soapMessage;
}
public static void main(String[] args) {
String deviceUrl = "http://192.168.51.137"; // Replace with your device URL
String username = "onvif1"; // Replace with your username
String password = "godspeed123"; // Replace with your password
ONVIFClient client = new ONVIFClient(deviceUrl, username, password);
client.getDeviceInfo();
}
}

View File

@ -0,0 +1,55 @@
package org.onvif.client;
public class OnvifCredentials {
private String host; // 92.168.xx.yy, or http://host[:port]
private String user; // admin
private String password; // secret
private String profile; // "MediaProfile000" If empty, will use first profile.
public OnvifCredentials(String host, String user, String password, String profile) {
this.host = host;
this.user = user;
this.password = password;
this.profile = profile;
}
public String getHost() {
return host;
}
public void setHost(String host) {
this.host = host;
}
public String getUser() {
return user;
}
public void setUser(String user) {
this.user = user;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getProfile() {
return profile;
}
public void setProfile(String profile) {
this.profile = profile;
}
public String toString() {
return host; // + "," + user+ "," + "****,"++ "#" + profile;
}
public String details() {
return host + "," + user + "," + password + "," + profile;
}
}

View File

@ -0,0 +1,96 @@
package org.onvif.client;
import de.onvif.soap.OnvifDevice;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ConnectException;
import java.net.MalformedURLException;
import java.util.List;
import javax.xml.soap.SOAPException;
import org.onvif.ver10.schema.Profile;
public class ReadCommandsFromStdInput {
private static final String INFO =
"Commands:\n \n url: Get snapshort URL.\n info: Get information about each valid command.\n profiles: Get all profiles.\n inspect: Get device details.\n exit: Exit this application.";
public static void main(String[] args) {
InputStreamReader inputStream = new InputStreamReader(System.in);
BufferedReader keyboardInput = new BufferedReader(inputStream);
String input, cameraAddress, user, password;
try {
System.out.println("Please enter camera IP (with port if not 80):");
cameraAddress = keyboardInput.readLine();
System.out.println("Please enter camera username:");
user = keyboardInput.readLine();
System.out.println("Please enter camera password:");
password = keyboardInput.readLine();
if (cameraAddress == null || user == null || password == null)
throw new IOException("No input");
} catch (IOException e1) {
e1.printStackTrace();
return;
}
System.out.println("Connect to camera, please wait ...");
OnvifDevice cam;
try {
cam = new OnvifDevice(cameraAddress, user, password);
} catch (MalformedURLException | ConnectException | SOAPException e1) {
System.err.println("No connection to camera, please try again.");
return;
}
System.out.println("Connection to camera successful!");
while (true) {
try {
System.out.println();
System.out.println("Enter a command (type \"info\" to get commands):");
input = keyboardInput.readLine();
if (input == null) break;
switch (input) {
case "url":
{
List<Profile> profiles = cam.getMedia().getProfiles();
for (Profile p : profiles) {
System.out.println(
"URL from Profile \'"
+ p.getName()
+ "\': "
+ cam.getMedia().getSnapshotUri(p.getToken()));
}
break;
}
case "profiles":
List<Profile> profiles = cam.getMedia().getProfiles();
System.out.println("Number of profiles: " + profiles.size());
for (Profile p : profiles) {
System.out.println(" Profile " + p.getName() + " token is: " + p.getToken());
}
break;
case "info":
System.out.println(INFO);
break;
case "inspect":
System.out.println(TestDevice.inspect(cam));
break;
case "quit":
case "exit":
case "end":
return;
default:
System.out.println("Unknown command!");
System.out.println();
System.out.println(INFO);
break;
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}

View File

@ -0,0 +1,325 @@
package org.onvif.client;
import org.onvif.ver10.recording.wsdl.*;
import de.onvif.soap.OnvifDevice;
import org.onvif.ver10.schema.*;
import org.onvif.ver10.schema.ImagingSettings;
import java.io.*;
import java.lang.Object;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Properties;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class SimpleTest {
private RecordingService recordingService;
public static String getCameraDetailsPayload(String propFileRelativePath) throws Exception {
final Properties config = new Properties();
final File f = new File(propFileRelativePath);
if (!f.exists()) throw new Exception("File not found: " + f.getAbsolutePath());
config.load(new FileInputStream(f));
StringBuilder output = new StringBuilder();
for (Object k : config.keySet()) {
String line = config.get(k.toString()).toString();
output.append(line).append("\n");
OnvifCredentials credentials = GetTestDevice.parse(line);
output.append("credentials: ").append(credentials.getUser()).append("\n");
if (credentials != null) {
try {
output.append("Connect to camera, please wait ...\n");
OnvifDevice cam = new OnvifDevice(
credentials.getHost(), credentials.getUser(), credentials.getPassword());
System.out.println("Connected to device ");
printProfiles(cam);
} catch (Throwable th) {
output.append("Error on device: ").append(k).append("\n");
th.printStackTrace();
}
}
}
return output.toString(); // Return the collected output as a string
}
// Add this method to print profiles
private static void printProfiles(OnvifDevice cam) {
// imagingSettings20.setBrightness(80.0F);
// System.out.println(cam.getImaging().getImagingSettings(cam.getMedia().getVideoSources().get(0).getToken()));
// cam.getImaging().setImagingSettings(cam.getMedia().getVideoSources().get(0).getToken(),imagingSettings20,false);
//
// ImagingSettings20 imagingSettings=new ImagingSettings20();
// imagingSettings.setBrightness(50.0F);
// cam.getImaging().setImagingSettings(cam.getMedia().getVideoSources().get(0).getToken(),imagingSettings,false);
System.out.println(cam.getReplay());
}
private static String printNetworkInterfaces(OnvifDevice cam) {
StringBuilder output = new StringBuilder();
try {
List<NetworkInterface> interfaces = cam.getDevice().getNetworkInterfaces();
output.append("Network Interfaces:\n");
for (NetworkInterface iface : interfaces) {
output.append(iface).append("\n");
}
} catch (Throwable th) {
output.append("Error getting network interfaces: ").append(th.getMessage()).append("\n");
}
return output.toString();
}
private static String printNetworkDefaultGateway(OnvifDevice cam) {
StringBuilder output = new StringBuilder();
try {
NetworkGateway defaultGateway = cam.getDevice().getNetworkDefaultGateway();
output.append("Network Default Gateway:\n");
output.append(defaultGateway).append("\n");
} catch (Throwable th) {
output.append("Error getting network default gateway: ").append(th.getMessage()).append("\n");
}
return output.toString();
}
private static String printSystemDateAndTime(OnvifDevice cam) {
StringBuilder output = new StringBuilder();
try {
SystemDateTime dateTime = cam.getDevice().getSystemDateAndTime();
output.append("System Date and Time:\n");
output.append(dateTime).append("\n");
} catch (Throwable th) {
output.append("Error getting system date and time: ").append(th.getMessage()).append("\n");
}
return output.toString();
}
private static String setosd(OnvifDevice cam,String user,String pass) {
// try {
// List<OSDConfiguration> osdConfigurations = cam.getMedia().getOSDs(null);
// // Assuming you want to update the second OSD configuration
// OSDConfiguration osdConfiguration = osdConfigurations.get(1);
//
//// Create the SetOSD object
// SetOSD setOSD = new SetOSD();
//
//// Set the OSDConfiguration in the SetOSD object
// setOSD.setOSD(osdConfiguration);
//
//// Retrieve the current token
// String osdToken = osdConfiguration.getToken();
//// Set the token explicitly (optional if already set)
// osdConfiguration.setToken(osdToken);
//
//// Set the VideoSourceConfigurationToken (ensure it's correct)
// osdConfiguration.setVideoSourceConfigurationToken(osdConfiguration.getVideoSourceConfigurationToken());
//
//// Set the OSD type (if necessary)
// osdConfiguration.setType(osdConfiguration.getType());
//
//// Set the position (create and set a new position if needed)
// OSDPosConfiguration position = new OSDPosConfiguration();
// position.setType("Custom");
// Vector positionVector = new Vector();
// positionVector.setX(0.5F); // Example x coordinate
// positionVector.setY(0.5F); // Example y coordinate
// position.setPos(positionVector);
// osdConfiguration.setPosition(position);
//
//// Set the text string
// OSDTextConfiguration textString = osdConfiguration.getTextString();
// textString.setType("Plain");
// textString.setPlainText("cam111");
//
//// Print the modified OSD configuration for debugging
// System.out.println(osdConfiguration);
//
//// Set the OSD configuration in the SetOSD object
// setOSD.setOSD(osdConfiguration);
//
// int port = extractPortFromUrl("rtsp://192.168.50.44:554/cam/realmonitor?channel=1&subtype=0&unicast=true&proto=Onvif");
// Utility method to extract port from RTSP URL
// List<Profile> profiles = cam.getMedia().getProfiles();
// System.out.println(cam.getMedia().getProfiles());
//
// // Print the profiles' name and token in the format "{name, token}"
// List<String> profileStrings = profiles.stream()
// .map(profile -> String.format("{%s, %s}", profile.getName(), profile.getToken()))
// .collect(Collectors.toList());
//
// profileStrings.forEach(System.out::println); // Printing profile details
//
// // Get and print the stream URIs for each profile
// profiles.forEach(profile -> {
// String streamUri = cam.getStreamUri(profile.getToken());
// System.out.println("Stream URI for profile " + profile.getName() + ": " + streamUri);
// });
// // Create a GetReplayUri request
// GetReplayUri getReplayUri = new GetReplayUri();
//
// StreamSetup streamSetup = new StreamSetup();
// StreamType streamType = StreamType.RTP_UNICAST; // Or RTP-Multicast
// Transport transport = new Transport();
// transport.setProtocol(TransportProtocol.HTTP); // Or TCP, UDP
//
// streamSetup.setStream(streamType);
// streamSetup.setTransport(transport);
//
//
// // Calculate start and end times (last 10 minutes)
// Date endTime = new Date(); // Current UTC time
// Date startTime = new Date(endTime.getTime() - 10 * 60 * 200); // Subtract 10 minutes
//
// // Format timestamps for ONVIF (UTC, ISO 8601 format)
// SimpleDateFormat iso8601 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
// iso8601.setTimeZone(TimeZone.getTimeZone("UTC"));
//
// // Fetch the Replay URI
// String replayUri = cam.getReplay().getReplayUri(streamSetup,"RecordMediaProfile00000");
//
//// Modify the Replay URI
// replayUri = modifyReplayUri(replayUri);
// System.out.println("Replay URI: " + startTime);
//// Save video segment using FFmpeg
// saveVideoSegment(replayUri, startTime, endTime,user,pass);
// Device device = cam.getDevice();
// List<NetworkProtocol> networkProtocols = device.getNetworkProtocols();
//
// final String[] httpPort = {null}; // Use an array to store the port
//
// networkProtocols.stream()
// .filter(protocol -> "HTTP".equals(protocol.getName().value())) // Filter for HTTP protocol
// .findFirst() // Find the first match
// .ifPresent(protocol -> httpPort[0] = protocol.getPort().get(0).toString());
////System.out.println(cam.getReplay().getReplayUri(streamSetup,cam.getRecordings1().getRecordings().get(0).getRecordingToken()));
// System.out.println(networkProtocols);
// } catch (Exception e) {
// System.out.println("Failed to update OSD: " + e.getMessage());
// e.printStackTrace();
// }
// return null;
//System.out.println(cam.getRecordings1().getRecordings().get(0).getTracks());
return "";
}
private static String modifyReplayUri(String replayUri) {
if (replayUri == null || replayUri.isEmpty()) {
throw new IllegalArgumentException("Replay URI is null or empty");
}
try {
// Replace "http" with "rtsp" and change port from 80 to 554
replayUri = replayUri.replaceFirst("http://", "rtsp://")
.replace(":80/", ":554/");
System.out.println("Modified Replay URI: " + replayUri);
} catch (Exception e) {
System.err.println("Error modifying replay URI: " + e.getMessage());
}
return replayUri;
}
private static int extractPortFromUrl(String url) {
Pattern pattern = Pattern.compile(":(\\d+)/");
Matcher matcher = pattern.matcher(url);
if (matcher.find()) {
return Integer.parseInt(matcher.group(1));
}
throw new IllegalArgumentException("Port not found in URL: " + url);
}
private static void saveVideoSegment(String replayUri, Date startTime, Date endTime,String username,String password) {
try {
// Calculate duration in seconds
long durationInSeconds = (endTime.getTime() - startTime.getTime()) / 1000;
// Generate output file name with timestamp
SimpleDateFormat timestampFormat = new SimpleDateFormat("yyyyMMddHHmmss");
String outputFileName = "video_last_10_mins_" + timestampFormat.format(startTime) + ".mp4";
String authenticatedReplayUri = replayUri.replaceFirst("rtsp://", "rtsp://" + username + ":" + password + "@");
SimpleDateFormat timeFormat = new SimpleDateFormat("HH:mm:ss");
String startTimeFormatted = timeFormat.format(startTime);
System.out.println(startTimeFormatted);
String[] command = {
"ffmpeg",
"-rtsp_transport", "tcp", // Ensure reliable RTSP transport
"-ss", startTimeFormatted, // Start time for the segment (before -i for faster seeking)
"-i", authenticatedReplayUri,
"-t", String.valueOf(durationInSeconds), // Duration in seconds
"-copyts", // Preserve input timestamps to avoid shifting the video
"-c:v", "copy", // Copy video stream without re-encoding
"-c:a", "aac", // Transcode audio stream to AAC
outputFileName
};
// Execute FFmpeg command
ProcessBuilder processBuilder = new ProcessBuilder(command);
processBuilder.redirectErrorStream(true); // Merge error stream with output
Process process = processBuilder.start();
// Read FFmpeg output (optional, for debugging)
try (BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()))) {
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
}
// Wait for FFmpeg to complete
int exitCode = process.waitFor();
if (exitCode == 0) {
System.out.println("Video saved successfully as " + outputFileName);
} else {
System.err.println("FFmpeg process failed with exit code " + exitCode);
}
} catch (Exception e) {
e.printStackTrace();
System.err.println("Error saving video segment: " + e.getMessage());
}
}
public static void main(String[] args) {
final String propFileRelativePath = "C:/rajmohan/onvif/onvif-java/src/test/resources/onvif.properties";
final String outputFilePath = "C:/rajmohan/onvif/onvif-java/src/test/resources/output.xml";
try {
// Get the payload
String payload = getCameraDetailsPayload(propFileRelativePath);
if (payload != null) {
// Write payload to XML file
try (FileWriter fileWriter = new FileWriter(new File(outputFilePath))) {
fileWriter.write(payload);
// System.out.println("Payload written to " + outputFilePath);
} catch (IOException e) {
System.out.println("Error writing to file: " + e.getMessage());
}
} else {
System.out.println("No payload created.");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}

View File

@ -0,0 +1,82 @@
package org.onvif.client;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Base64;
public class SoapClient {
private static final String SOAP_ENDPOINT_URL = "http://192.168.51.137/onvif/device_service"; // Replace with actual device IP and port
private static final String SOAP_ACTION = "http://www.onvif.org/ver10/device/wsdl/GetGeoLocation";
private static final String USERNAME = "onvif1"; // Replace with your username
private static final String PASSWORD = "godspeed123"; // Replace with your password
public static void main(String[] args) {
try {
// Construct the SOAP request XML
String soapRequest = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
"<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" " +
"xmlns:tds=\"http://www.onvif.org/ver10/device/wsdl\">" +
"<soapenv:Header/>" +
"<soapenv:Body>" +
"<tds:GetGeoLocation/>" +
"</soapenv:Body>" +
"</soapenv:Envelope>";
// Create a connection to the SOAP endpoint
URL url = new URL(SOAP_ENDPOINT_URL);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("POST");
connection.setRequestProperty("Content-Type", "text/xml; charset=utf-8");
connection.setRequestProperty("SOAPAction", SOAP_ACTION);
connection.setDoOutput(true);
// Add Basic Authentication
String auth = USERNAME + ":" + PASSWORD;
String encodedAuth = Base64.getEncoder().encodeToString(auth.getBytes("UTF-8"));
connection.setRequestProperty("Authorization", "Basic " + encodedAuth);
// Send the SOAP request
OutputStream os = connection.getOutputStream();
os.write(soapRequest.getBytes("UTF-8"));
os.flush();
os.close();
// Check the response code
int responseCode = connection.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_OK) {
// Read the SOAP response
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String inputLine;
StringBuilder response = new StringBuilder();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
// Print the SOAP response
System.out.println("Response:");
System.out.println(response.toString());
} else {
// Handle errors
System.out.println("Error: " + responseCode);
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getErrorStream()));
String inputLine;
StringBuilder errorResponse = new StringBuilder();
while ((inputLine = in.readLine()) != null) {
errorResponse.append(inputLine);
}
in.close();
// Print the error response
System.out.println("Error Response:");
System.out.println(errorResponse.toString());
}
} catch (Exception e) {
e.printStackTrace();
}
}
}

View File

@ -0,0 +1,196 @@
package org.onvif.client;
import de.onvif.beans.DeviceInfo;
import de.onvif.soap.OnvifDevice;
import de.onvif.utils.OnvifUtils;
import java.io.IOException;
import java.net.URL;
import java.util.List;
import javax.xml.soap.SOAPException;
import org.onvif.ver10.device.wsdl.DeviceServiceCapabilities;
import org.onvif.ver10.events.wsdl.EventPortType;
import org.onvif.ver10.events.wsdl.GetEventProperties;
import org.onvif.ver10.events.wsdl.GetEventPropertiesResponse;
import org.onvif.ver10.media.wsdl.Media;
import org.onvif.ver10.schema.AudioSource;
import org.onvif.ver10.schema.PTZPreset;
import org.onvif.ver10.schema.PTZStatus;
import org.onvif.ver10.schema.Profile;
import org.onvif.ver10.schema.VideoSource;
import org.onvif.ver20.imaging.wsdl.ImagingPort;
import org.onvif.ver20.ptz.wsdl.Capabilities;
import org.onvif.ver20.ptz.wsdl.PTZ;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
/** @author Brad Lowe */
public class TestDevice {
private static final Logger LOG = LoggerFactory.getLogger(TestDevice.class);
public static String testCamera(OnvifCredentials creds) throws SOAPException, IOException {
URL u =
creds.getHost().startsWith("http")
? new URL(creds.getHost())
: new URL("http://" + creds.getHost());
return testCamera(u, creds.getUser(), creds.getPassword());
}
static String sep = "\n";
// This method returns information about an initialized OnvifDevice.
// This could throw an uncaught SOAP or other error on some cameras...
// Would accept Pull Requests on printing out additional information about devices.
public static String inspect(OnvifDevice device) {
String out = "";
DeviceInfo info = device.getDeviceInfo();
out += "DeviceInfo:" + sep + "\t" + info + sep;
DeviceServiceCapabilities caps = device.getDevice().getServiceCapabilities();
String sysCaps = OnvifUtils.format(caps);
sysCaps = sysCaps.replace("],", "],\t\n");
out += "\tgetServiceCapabilities: " + sysCaps + sep;
// out += "\tgetServiceCapabilities.getSystem: " + OnvifUtils.format(caps.getSystem()) + sep;
Media media = device.getMedia();
media.getVideoSources();
List<Profile> profiles = media.getProfiles();
out += "Media Profiles: " + profiles.size() + sep;
for (Profile profile : profiles) {
String profileToken = profile.getToken();
String rtsp = device.getStreamUri(profileToken);
out += "\tProfile: " + profile.getName() + " token=" + profile.getToken() + sep;
out += "\t\tstream: " + rtsp + sep;
out += "\t\tsnapshot: " + device.getSnapshotUri(profileToken) + sep;
out += "\t\tdetails:" + OnvifUtils.format(profile) + sep;
}
try {
List<VideoSource> videoSources = media.getVideoSources();
out += "VideoSources: " + videoSources.size() + sep;
for (VideoSource v : videoSources) out += "\t" + OnvifUtils.format(v) + sep;
ImagingPort imaging = device.getImaging();
if (imaging != null && videoSources.size() > 0) {
String token = videoSources.get(0).getToken();
out += "Imaging:" + token + sep;
try {
org.onvif.ver20.imaging.wsdl.Capabilities image_caps = imaging.getServiceCapabilities();
out += "\tgetServiceCapabilities=" + OnvifUtils.format(image_caps) + sep;
if (token != null) {
out +=
"\tgetImagingSettings="
+ OnvifUtils.format(imaging.getImagingSettings(token))
+ sep;
out += "\tgetMoveOptions=" + OnvifUtils.format(imaging.getMoveOptions(token)) + sep;
out += "\tgetStatus=" + OnvifUtils.format(imaging.getStatus(token)) + sep;
out += "\tgetOptions=" + OnvifUtils.format(imaging.getOptions(token)) + sep;
}
} catch (Throwable th) {
out += "Imaging unavailable:" + th.getMessage() + sep;
}
}
} catch (Throwable th) {
// this can fail if the device doesn't support video sources.
out += "VideoSources: " + th.getMessage() + sep;
}
try {
// This may throw a SoapFaultException with the message "This device does not support audio"
List<AudioSource> audioSources = media.getAudioSources();
out += "AudioSources: " + audioSources.size() + sep;
for (AudioSource a : audioSources) out += "\t" + OnvifUtils.format(a) + sep;
} catch (Throwable th) {
out += "AudioSources Unavailable: " + th.getMessage() + sep;
}
try {
EventPortType events = device.getEvents();
if (events != null) {
out += "Events:" + sep;
out +=
"\tgetServiceCapabilities=" + OnvifUtils.format(events.getServiceCapabilities()) + sep;
GetEventProperties getEventProperties = new GetEventProperties();
GetEventPropertiesResponse getEventPropertiesResp =
events.getEventProperties(getEventProperties);
out += "\tMessageContentFilterDialects:" + sep;
for (String f : getEventPropertiesResp.getMessageContentFilterDialect())
out += ("\t\t" + f + sep);
out += "\tTopicExpressionDialects:" + sep;
for (String f : getEventPropertiesResp.getTopicExpressionDialect())
out += ("\t\t" + f + sep);
out += "\tTopics:" + sep;
StringBuffer tree = new StringBuffer();
for (Object object : getEventPropertiesResp.getTopicSet().getAny()) {
Element e = (Element) object;
printTree(e, e.getNodeName(), tree);
// WsNotificationTest.printTree(e, e.getNodeName());
}
out += tree;
}
} catch (Throwable th) {
out += "Events Unavailable: " + th.getMessage() + sep;
}
PTZ ptz = device.getPtz();
if (ptz != null) {
String profileToken = profiles.get(0).getToken();
try {
Capabilities ptz_caps = ptz.getServiceCapabilities();
out += "PTZ:" + sep;
out += "\tgetServiceCapabilities=" + OnvifUtils.format(ptz_caps) + sep;
PTZStatus s = ptz.getStatus(profileToken);
out += "\tgetStatus=" + OnvifUtils.format(s) + sep;
// out += "ptz.getConfiguration=" + ptz.getConfiguration(profileToken) + sep;
List<PTZPreset> presets = ptz.getPresets(profileToken);
if (presets != null && !presets.isEmpty()) {
out += "\tPresets:" + presets.size() + sep;
for (PTZPreset p : presets) out += "\t\t" + OnvifUtils.format(p) + sep;
}
} catch (Throwable th) {
out += "PTZ: Unavailable" + th.getMessage() + sep;
}
}
return out;
}
public static void printTree(Node node, String name, StringBuffer buffer) {
if (node.hasChildNodes()) {
NodeList nodes = node.getChildNodes();
for (int i = 0; i < nodes.getLength(); i++) {
Node n = nodes.item(i);
printTree(n, name + " - " + n.getNodeName(), buffer);
}
} else {
buffer.append("\t\t" + name + " - " + node.getNodeName() + "\n");
}
}
public static String testCamera(URL url, String user, String password)
throws SOAPException, IOException {
LOG.info("Testing camera:" + url);
OnvifDevice device = new OnvifDevice(url, user, password);
return inspect(device);
}
public static void main(String[] args) {
OnvifCredentials creds = GetTestDevice.getOnvifCredentials(args);
try {
// OnvifDevice.setVerbose(true);
String out = testCamera(creds);
LOG.info("\n" + out + "\n");
} catch (Throwable th) {
LOG.error("Failed for " + creds, th);
th.printStackTrace();
}
}
}

View File

@ -0,0 +1,182 @@
package org.onvif.client;
import de.onvif.soap.OnvifDevice;
import java.io.File;
import java.io.IOException;
import java.net.ConnectException;
import java.net.URL;
import java.util.Arrays;
import java.util.List;
import javax.xml.bind.JAXBElement;
import javax.xml.soap.SOAPException;
import org.apache.activemq.ActiveMQConnectionFactory;
import org.apache.commons.io.FileUtils;
import org.apache.cxf.wsn.client.Consumer;
import org.apache.cxf.wsn.client.NotificationBroker;
import org.apache.cxf.wsn.client.Subscription;
import org.apache.cxf.wsn.services.JaxwsNotificationBroker;
import org.oasis_open.docs.wsn.b_2.FilterType;
import org.oasis_open.docs.wsn.b_2.NotificationMessageHolderType;
import org.oasis_open.docs.wsn.b_2.TopicExpressionType;
import org.oasis_open.docs.wsn.bw_2.InvalidFilterFault;
import org.oasis_open.docs.wsn.bw_2.InvalidMessageContentExpressionFault;
import org.oasis_open.docs.wsn.bw_2.InvalidProducerPropertiesExpressionFault;
import org.oasis_open.docs.wsn.bw_2.InvalidTopicExpressionFault;
import org.oasis_open.docs.wsn.bw_2.NotifyMessageNotSupportedFault;
import org.oasis_open.docs.wsn.bw_2.SubscribeCreationFailedFault;
import org.oasis_open.docs.wsn.bw_2.TopicExpressionDialectUnknownFault;
import org.oasis_open.docs.wsn.bw_2.TopicNotSupportedFault;
import org.oasis_open.docs.wsn.bw_2.UnacceptableInitialTerminationTimeFault;
import org.oasis_open.docs.wsn.bw_2.UnrecognizedPolicyRequestFault;
import org.oasis_open.docs.wsn.bw_2.UnsupportedPolicyRequestFault;
import org.oasis_open.docs.wsrf.rw_2.ResourceUnknownFault;
import org.onvif.ver10.events.wsdl.CreatePullPointSubscription;
import org.onvif.ver10.events.wsdl.CreatePullPointSubscription.SubscriptionPolicy;
import org.onvif.ver10.events.wsdl.CreatePullPointSubscriptionResponse;
import org.onvif.ver10.events.wsdl.EventPortType;
import org.onvif.ver10.events.wsdl.GetEventProperties;
import org.onvif.ver10.events.wsdl.GetEventPropertiesResponse;
import org.onvif.ver10.schema.Capabilities;
import org.onvif.ver10.schema.CapabilityCategory;
import org.onvif.ver10.schema.MediaUri;
import org.onvif.ver10.schema.Profile;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
public class WsNotificationTest {
public static void main(String[] args) throws IOException {
OnvifCredentials creds = GetTestDevice.getOnvifCredentials(args);
System.out.println("Connect to camera, please wait ...");
OnvifDevice cam = null;
try {
cam = new OnvifDevice(creds.getHost(), creds.getUser(), creds.getPassword());
} catch (ConnectException | SOAPException e1) {
System.err.println("No connection to device with IP " + creds + ", please try again.");
System.exit(0);
}
System.out.println("Connected to device " + cam.getDeviceInfo());
// Get device capabilities
Capabilities cap = cam.getDevice().getCapabilities(Arrays.asList(CapabilityCategory.ALL));
System.out.println(cap.getDevice().toString());
// Print profiles
printProfiles(cam);
EventPortType eventWs = cam.getEvents();
GetEventProperties getEventProperties = new GetEventProperties();
GetEventPropertiesResponse getEventPropertiesResp =
eventWs.getEventProperties(getEventProperties);
getEventPropertiesResp.getMessageContentFilterDialect().forEach(System.out::println);
getEventPropertiesResp.getTopicExpressionDialect().forEach(System.out::println);
for (Object object : getEventPropertiesResp.getTopicSet().getAny()) {
Element e = (Element) object;
printTree(e, e.getNodeName());
}
// Subscribe to all events by using the root topic or no topic at all
org.oasis_open.docs.wsn.b_2.ObjectFactory objectFactory =
new org.oasis_open.docs.wsn.b_2.ObjectFactory();
CreatePullPointSubscription pullPointSubscription = new CreatePullPointSubscription();
FilterType filter = new FilterType();
TopicExpressionType topicExp = new TopicExpressionType();
// Subscribe to all events by using the root topic or no specific topic filter
topicExp.getContent().add("tns1:Device"); // Root topic expression for all device events
topicExp.setDialect("http://www.onvif.org/ver10/tev/topicExpression/ConcreteSet");
JAXBElement<?> topicExpElem = objectFactory.createTopicExpression(topicExp);
filter.getAny().add(topicExpElem); // This filters for all device events
pullPointSubscription.setFilter(filter);
org.onvif.ver10.events.wsdl.ObjectFactory eventObjFactory =
new org.onvif.ver10.events.wsdl.ObjectFactory();
SubscriptionPolicy subscriptionPolicy =
eventObjFactory.createCreatePullPointSubscriptionSubscriptionPolicy();
pullPointSubscription.setSubscriptionPolicy(subscriptionPolicy);
String timespan = "PT10S"; // Poll every 10 seconds
pullPointSubscription.setInitialTerminationTime(
objectFactory.createSubscribeInitialTerminationTime(timespan));
try {
CreatePullPointSubscriptionResponse resp =
eventWs.createPullPointSubscription(pullPointSubscription);
System.out.println(resp);
// Start a consumer that will listen for notification messages
String eventConsumerAddress = "http://localhost:9001/MyConsumer";
Consumer consumer =
new Consumer(
message -> {
Object o = message.getMessage().getAny();
System.out.println("Received notification:");
if (o instanceof Element) {
System.out.println(((Element) o).getTextContent());
}
},
eventConsumerAddress);
String queuePort = "8182";
String brokerPort = "8181";
String brokerAddress = "http://localhost:" + brokerPort + "/wsn/NotificationBroker";
ActiveMQConnectionFactory activemq =
new ActiveMQConnectionFactory(
"vm:(broker:(tcp://localhost:" + queuePort + ")?persistent=false)");
JaxwsNotificationBroker notificationBrokerServer =
new JaxwsNotificationBroker("WSNotificationBroker", activemq);
notificationBrokerServer.setAddress(brokerAddress);
notificationBrokerServer.init();
// Create a subscription for a Topic on the broker
NotificationBroker notificationBroker = new NotificationBroker(brokerAddress);
Subscription subscription = notificationBroker.subscribe(consumer, "tns1:Device");
// Wait for some messages to accumulate in the pull point
Thread.sleep(50_000);
// Cleanup and exit
subscription.unsubscribe();
consumer.stop();
} catch (TopicNotSupportedFault
| TopicExpressionDialectUnknownFault
| InvalidTopicExpressionFault
| InvalidMessageContentExpressionFault
| InvalidProducerPropertiesExpressionFault
| UnacceptableInitialTerminationTimeFault
| NotifyMessageNotSupportedFault
| ResourceUnknownFault
| UnsupportedPolicyRequestFault
| InvalidFilterFault
| SubscribeCreationFailedFault
| UnrecognizedPolicyRequestFault e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void printTree(Node node, String name) {
if (node.hasChildNodes()) {
NodeList nodes = node.getChildNodes();
for (int i = 0; i < nodes.getLength(); i++) {
Node n = nodes.item(i);
printTree(n, name + " - " + n.getNodeName());
}
} else {
System.out.println(name + " - " + node.getNodeName());
}
}
private static void printProfiles(OnvifDevice cam) {
List<Profile> profiles = cam.getMedia().getProfiles();
for (Profile p : profiles) {
System.out.printf(
"Profile: [token=%s,name=%s,snapshotUri=%s]%n",
p.getToken(), p.getName(), cam.getMedia().getSnapshotUri(p.getToken()).getUri());
}
}
}

View File

@ -0,0 +1,2 @@
#device name,IP address,username,password,profile-token
mycam1=10.197.171.5,admin,keltron@123,MediaProfile000

View File

@ -0,0 +1,3 @@
10.197.171.5,admin,keltron@123,MediaProfile000
credentials: admin
Connect to camera, please wait ...

189
onvif-ws-client/pom.xml Normal file
View File

@ -0,0 +1,189 @@
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.onvif</groupId>
<artifactId>onvif</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>onvif-ws-client</artifactId>
<dependencies>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxws</artifactId>
<version>${cxf.version}</version>
</dependency>
<!-- <dependency> -->
<!-- <groupId>org.apache.cxf</groupId> -->
<!-- <artifactId>cxf-rt-transports-http-hc</artifactId> -->
<!-- <version>${cxf.version}</version> -->
<!-- </dependency> -->
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http-jetty</artifactId>
<version>${cxf.version}</version>
</dependency>
<!-- Java 9+ javax dependencies start -->
<dependency>
<groupId>javax.xml.ws</groupId>
<artifactId>jaxws-api</artifactId>
<version>2.3.1</version>
</dependency>
<dependency>
<groupId>javax.jws</groupId>
<artifactId>javax.jws-api</artifactId>
<version>1.1</version>
</dependency>
<!-- Java 9+ javax dependencies end -->
<dependency>
<groupId>org.apache.cxf.services.wsn</groupId>
<artifactId>cxf-services-wsn-core</artifactId>
<version>${cxf.version}</version>
</dependency>
<!-- For creating human readable toString() functions in generated classes. -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.8.1</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.apache.cxf.xjc-utils</groupId>
<artifactId>cxf-xjc-runtime</artifactId>
<version>3.3.0</version>
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-model-builder</artifactId>
<version>3.6.1</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-codegen-plugin</artifactId>
<version>3.3.2</version>
<executions>
<execution>
<id>generate-ws-stubs</id>
<phase>generate-sources</phase>
<goals>
<goal>wsdl2java</goal>
</goals>
<configuration>
<wsdlRoot>${basedir}/src/main/resources/wsdl</wsdlRoot>
<sourceRoot>${basedir}/src/main/java</sourceRoot>
<!--
// TODO: Consider moving generated sources to separate folder and excluse from source control.
<sourceRoot>${basedir}/generated/src/main/java</sourceRoot>
-->
<includes>
<include>*.wsdl</include>
</includes>
<defaultOptions>
<extraargs>
<!-- DataMapper compatibility requires that the boolean getters
and setters follow naming conventions for other getters and setters. -->
<extraarg>-xjc-Xbg</extraarg>
<extraarg>-xjc-Xts</extraarg> <!-- added for toString() builder -->
<extraarg>-verbose</extraarg>
<extraarg>-suppress-generated-date</extraarg>
<extraarg>-wsdlLocation</extraarg>
<extraarg>null</extraarg>
<extraarg>-catalog</extraarg>
<extraarg>${basedir}/src/main/resources/wsdl/jax-ws-catalog.xml</extraarg>
</extraargs>
</defaultOptions>
</configuration>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-bindings-soap</artifactId>
<version>3.1.0</version>
</dependency>
<!-- Boolean getters/setters -->
<dependency>
<groupId>org.apache.cxf.xjcplugins</groupId>
<artifactId>cxf-xjc-boolean</artifactId>
<version>3.1.0</version>
</dependency>
<!-- ToString -->
<dependency>
<groupId>org.apache.cxf.xjcplugins</groupId>
<artifactId>cxf-xjc-ts</artifactId>
<version>3.1.0</version>
</dependency>
<dependency>
<groupId>org.apache.cxf.xjc-utils</groupId>
<artifactId>cxf-xjc-runtime</artifactId>
<version>3.3.0</version>
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-model-builder</artifactId>
<version>3.6.1</version>
</dependency>
<!-- for java 10+ -->
<dependency>
<groupId>com.sun.activation</groupId>
<artifactId>javax.activation</artifactId>
<version>${javax.activation.version}</version>
</dependency>
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>${jaxb.api.version}</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-core</artifactId>
<version>2.3.0.1</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>${jaxb.api.version}</version>
</dependency>
<dependency>
<groupId>javax.annotation</groupId>
<artifactId>javax.annotation-api</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>javax.xml.ws</groupId>
<artifactId>jaxws-api</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>javax.activation</groupId>
<artifactId>activation</artifactId>
<version>1.1.1</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
</project>

View File

@ -0,0 +1 @@
/org/

View File

@ -0,0 +1,931 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="../../ver20/util/onvif-wsdl-viewer.xsl"?>
<!--
Copyright (c) 2010-2013 by ONVIF: Open Network Video Interface Forum. All rights reserved.
Recipients of this document may copy, distribute, publish, or display this
document so long as this copyright notice, license and disclaimer are
retained with all copies of the document.
THIS DOCUMENT IS PROVIDED "AS IS," AND THE CORPORATION AND ITS MEMBERS AND
THEIR AFFILIATES, MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED,
INCLUDING BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, OR TITLE;
THAT THE CONTENTS OF THIS DOCUMENT ARE SUITABLE FOR ANY PURPOSE;
OR THAT THE IMPLEMENTATION OF SUCH CONTENTS WILL NOT INFRINGE ANY PATENTS,
COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.
IN NO EVENT WILL THE CORPORATION OR ITS MEMBERS OR THEIR AFFILIATES BE LIABLE
FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL, PUNITIVE OR CONSEQUENTIAL
DAMAGES, ARISING OUT OF OR RELATING TO ANY USE OR DISTRIBUTION OF THIS
DOCUMENT, WHETHER OR NOT (1) THE CORPORATION, MEMBERS OR THEIR AFFILIATES
HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES, OR (2) SUCH DAMAGES
WERE REASONABLY FORESEEABLE, AND ARISING OUT OF OR RELATING TO ANY USE OR
DISTRIBUTION OF THIS DOCUMENT.
THE FOREGOING DISCLAIMER AND LIMITATION ON LIABILITY DO NOT APPLY TO,
INVALIDATE, OR LIMIT REPRESENTATIONS AND WARRANTIES MADE BY THE MEMBERS
AND THEIR RESPECTIVE AFFILIATES TO THE CORPORATION AND OTHER MEMBERS IN
CERTAIN WRITTEN POLICIES OF THE CORPORATION.
-->
<wsdl:definitions name="PACSService" targetNamespace="http://www.onvif.org/ver10/accesscontrol/wsdl"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap12/"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:tac="http://www.onvif.org/ver10/accesscontrol/wsdl"
>
<wsdl:types>
<xs:schema targetNamespace="http://www.onvif.org/ver10/accesscontrol/wsdl"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:pt="http://www.onvif.org/ver10/pacs"
xmlns:tac="http://www.onvif.org/ver10/accesscontrol/wsdl"
elementFormDefault="qualified"
version="1.0">
<xs:import namespace="http://www.onvif.org/ver10/pacs" schemaLocation="types.xsd"/>
<!--====== types ======-->
<xs:complexType name="ServiceCapabilities">
<xs:annotation>
<xs:documentation>
The service capabilities reflect optional functionality of a service.
The information is static and does not change during device operation.
The following capabilities are available:
</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:any namespace="##any" minOccurs="0" maxOccurs="unbounded" processContents="lax"/>
</xs:sequence>
<xs:attribute name="MaxLimit" type="xs:unsignedInt" use="required">
<xs:annotation>
<xs:documentation>The maximum number of entries returned by a single GetList request.
The device shall never return more than this number of entities in a single response.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:anyAttribute processContents="lax"/>
</xs:complexType>
<!--===============================-->
<xs:complexType name="AccessPointInfoBase">
<xs:annotation>
<xs:documentation>
Used as extension base for AccessPointInfo.
</xs:documentation>
</xs:annotation>
<xs:complexContent>
<xs:extension base="pt:DataEntity">
<xs:sequence>
<xs:element name="Name" type="pt:Name">
<xs:annotation>
<xs:documentation>A user readable name. It shall be up to 64 characters.
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="Description" type="pt:Description" minOccurs="0">
<xs:annotation>
<xs:documentation>Optional user readable description for the AccessPoint. It shall
be up to 1024 characters.
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="AreaFrom" type="pt:ReferenceToken" minOccurs="0">
<xs:annotation>
<xs:documentation>Optional reference to the Area from which access is requested.
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="AreaTo" type="pt:ReferenceToken" minOccurs="0">
<xs:annotation>
<xs:documentation>Optional reference to the Area to which access is requested.
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="EntityType" type="xs:QName" minOccurs="0">
<xs:annotation>
<xs:documentation>Optional entity type; if missing, a Door type as defined by the
ONVIF DoorControl service should be assumed. This can also be represented by the
QName value "tdc:Door" - where tdc is the namespace of the Door Control service:
&quot;http://www.onvif.org/ver10/doorcontrol/wsdl&quot;. This field is provided
for future extensions; it will allow an AccessPoint being extended to cover
entity types other than Doors as well.
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="Entity" type="pt:ReferenceToken">
<xs:annotation>
<xs:documentation>Reference to the entity used to control access; the entity type
may be specified by the optional EntityType field explained below but is
typically a Door.
</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!--===============================-->
<xs:complexType name="AccessPointInfo">
<xs:annotation>
<xs:documentation>
The AccessPointInfo structure contains basic information about an AccessPoint instance.
An AccessPoint defines an entity a Credential can be granted or denied access to. The
AccessPointInfo provides basic information on how access is controlled in one direction
for a
door (from which area to which area).
&lt;/p&gt;&lt;p&gt;
door is the typical device involved, but other type of
devices may be supported as well.
Multiple AccessPoints may cover the same Door.
A typical case is one AccessPoint for entry and another for exit, both referencing
the same Door.
&lt;/p&gt;&lt;p&gt;
An ONVIF compliant device shall provide the following fields for each AccessPoint
instance:
</xs:documentation>
</xs:annotation>
<xs:complexContent>
<xs:extension base="tac:AccessPointInfoBase">
<xs:sequence>
<xs:element name="Capabilities" type="tac:AccessPointCapabilities">
<xs:annotation>
<xs:documentation>The capabilities for the AccessPoint.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:any namespace="##any" minOccurs="0" maxOccurs="unbounded" processContents="lax"/>
</xs:sequence>
<xs:anyAttribute processContents="lax"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!--===============================-->
<xs:complexType name="AccessPointCapabilities">
<xs:annotation>
<xs:documentation>
The AccessPoint capabilities reflect optional functionality of a particular physical
entity.
Different AccessPoint instances may have different set of capabilities. This information
may
change during device operation, e.g. if hardware settings are changed.
The following capabilities are available:
</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:any namespace="##any" minOccurs="0" maxOccurs="unbounded" processContents="lax"/>
</xs:sequence>
<xs:attribute name="DisableAccessPoint" type="xs:boolean" use="required">
<xs:annotation>
<xs:documentation>Indicates whether or not this AccessPoint instance supports
EnableAccessPoint and DisableAccessPoint commands.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="Duress" type="xs:boolean">
<xs:annotation>
<xs:documentation>Indicates whether or not this AccessPoint instance supports generation
of duress events.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="AnonymousAccess" type="xs:boolean">
<xs:annotation>
<xs:documentation>Indicates whether or not this AccessPoint has a REX switch or other
input that allows anonymous access.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="AccessTaken" type="xs:boolean">
<xs:annotation>
<xs:documentation>Indicates whether or not this AccessPoint instance supports generation
of AccessTaken and AccessNotTaken events. If AnonymousAccess and AccessTaken are both
true, it indicates that the Anonymous versions of AccessTaken and AccessNotTaken are
supported.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="ExternalAuthorization" type="xs:boolean">
<xs:annotation>
<xs:documentation>Indicates whether or not this AccessPoint instance supports the
ExternalAuthorization operation and the generation of Request events. If
AnonymousAccess and ExternalAuthorization are both true, it indicates that the
Anonymous version is supported as well.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:anyAttribute processContents="lax"/>
</xs:complexType>
<!--===============================-->
<xs:complexType name="AreaInfoBase">
<xs:annotation>
<xs:documentation>
Basic information about an Area. Used as extension base.
</xs:documentation>
</xs:annotation>
<xs:complexContent>
<xs:extension base="pt:DataEntity">
<xs:sequence>
<xs:element name="Name" type="pt:Name">
<xs:annotation>
<xs:documentation>User readable name. It shall be up to 64 characters.
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="Description" type="pt:Description" minOccurs="0">
<xs:annotation>
<xs:documentation>User readable description for the Area. It shall be up to 1024
characters.
</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!--===============================-->
<xs:complexType name="AreaInfo">
<xs:annotation>
<xs:documentation>
The AreaInfo structure contains basic information about an Area.
An ONVIF compliant device shall provide the following fields for each Area:
</xs:documentation>
</xs:annotation>
<xs:complexContent>
<xs:extension base="tac:AreaInfoBase">
<xs:sequence>
</xs:sequence>
<xs:anyAttribute processContents="lax"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!--===============================-->
<xs:complexType name="AccessPointState">
<xs:annotation>
<xs:documentation>
The AccessPointState contains state information for an AccessPoint.
An ONVIF compliant device shall provide the following fields for each AccessPoint
instance:
</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element name="Enabled" type="xs:boolean">
<xs:annotation>
<xs:documentation>Indicates that the AccessPoint is enabled. By default this field
value shall be True, if the DisableAccessPoint capabilities is not supported.
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:any namespace="##any" minOccurs="0" maxOccurs="unbounded" processContents="lax"/>
</xs:sequence>
<xs:anyAttribute processContents="lax"/>
</xs:complexType>
<!--===============================-->
<xs:simpleType name="Decision">
<xs:annotation>
<xs:documentation>
The Decision enumeration represents a choice of two available options for an access
request:
</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:string">
<xs:enumeration value="Granted">
<xs:annotation>
<xs:documentation>The decision is to grant access.</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="Denied">
<xs:annotation>
<xs:documentation>The decision is to deny access.</xs:documentation>
</xs:annotation>
</xs:enumeration>
</xs:restriction>
</xs:simpleType>
<!--===============================-->
<xs:simpleType name="DenyReason">
<xs:annotation>
<xs:documentation>
Non-normative enum that describes the various reasons for denying access.
The following strings shall be used for the reason field:
</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:string">
<xs:enumeration value="CredentialNotEnabled">
<xs:annotation>
<xs:documentation>The device shall provide the following event, whenever a valid
credential is not enabled or has been disabled (e.g., due to credential being lost
etc.) to prevent unauthorized entry.
</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="CredentialNotActive">
<xs:annotation>
<xs:documentation>The device shall provide the following event, whenever a valid
credential is presented though it is not active yet;: e.g, the credential was
presented before the start date.
</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="CredentialExpired">
<xs:annotation>
<xs:documentation>The device shall provide the following event, whenever a valid
credential was presented after its expiry date.
</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="InvalidPIN">
<xs:annotation>
<xs:documentation>The device shall provide the following event, whenever an entered
PIN code does not match the credential.
</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="NotPermittedAtThisTime">
<xs:annotation>
<xs:documentation>The device shall provide the following event, whenever a valid
credential is denied access to the requested AccessPoint because the credential is
not permitted at the moment.
</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="Unauthorized">
<xs:annotation>
<xs:documentation>The device shall provide the following event, whenever the presented
credential is not authorized.
</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="Other">
<xs:annotation>
<xs:documentation>The device shall provide the following event, whenever the request
is denied and no other specific event matches it or is supported by the service.
</xs:documentation>
</xs:annotation>
</xs:enumeration>
</xs:restriction>
</xs:simpleType>
<!--===============================-->
<!-- Message Request / Response elements -->
<xs:element name="GetServiceCapabilities">
<xs:complexType>
<xs:sequence>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="GetServiceCapabilitiesResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="Capabilities" type="tac:ServiceCapabilities">
<xs:annotation>
<xs:documentation>The capability response message contains the requested Access
Control service capabilities using a hierarchical XML capability structure.
</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="GetAccessPointInfoList">
<xs:complexType>
<xs:sequence>
<xs:element name="Limit" type="xs:int" minOccurs="0">
<xs:annotation>
<xs:documentation>Maximum number of entries to return. If not specified, less than
one or higher than what the device supports, the number of items is determined by
the device.
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="StartReference" type="xs:string" minOccurs="0">
<xs:annotation>
<xs:documentation>Start returning entries from this start reference. If not
specified, entries shall start from the beginning of the dataset.
</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="GetAccessPointInfoListResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="NextStartReference" type="xs:string" minOccurs="0">
<xs:annotation>
<xs:documentation>StartReference to use in next call to get the following items. If
absent, no more items to get.
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="AccessPointInfo" type="tac:AccessPointInfo" minOccurs="0"
maxOccurs="unbounded">
<xs:annotation>
<xs:documentation>List of AccessPointInfo items.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="GetAccessPointInfo">
<xs:complexType>
<xs:sequence>
<xs:element name="Token" type="pt:ReferenceToken" maxOccurs="unbounded">
<xs:annotation>
<xs:documentation>Tokens of AccessPointInfo items to get.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="GetAccessPointInfoResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="AccessPointInfo" type="tac:AccessPointInfo" minOccurs="0"
maxOccurs="unbounded">
<xs:annotation>
<xs:documentation>List of AccessPointInfo items.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="GetAreaInfoList">
<xs:complexType>
<xs:sequence>
<xs:element name="Limit" type="xs:int" minOccurs="0">
<xs:annotation>
<xs:documentation>Maximum number of entries to return. If not specified, less than
one or higher than what the device supports, the number of items is determined by
the device.
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="StartReference" type="xs:string" minOccurs="0">
<xs:annotation>
<xs:documentation>Start returning entries from this start reference. If not
specified, entries shall start from the beginning of the dataset.
</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="GetAreaInfoListResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="NextStartReference" type="xs:string" minOccurs="0">
<xs:annotation>
<xs:documentation>StartReference to use in next call to get the following items. If
absent, no more items to get.
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="AreaInfo" type="tac:AreaInfo" minOccurs="0" maxOccurs="unbounded">
<xs:annotation>
<xs:documentation>List of AreaInfo items.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="GetAreaInfo">
<xs:complexType>
<xs:sequence>
<xs:element name="Token" type="pt:ReferenceToken" maxOccurs="unbounded">
<xs:annotation>
<xs:documentation>Tokens of AreaInfo items to get.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="GetAreaInfoResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="AreaInfo" type="tac:AreaInfo" minOccurs="0" maxOccurs="unbounded">
<xs:annotation>
<xs:documentation>List of AreaInfo items.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="GetAccessPointState">
<xs:complexType>
<xs:sequence>
<xs:element name="Token" type="pt:ReferenceToken">
<xs:annotation>
<xs:documentation>Token of AccessPoint instance to get AccessPointState for.
</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="GetAccessPointStateResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="AccessPointState" type="tac:AccessPointState">
<xs:annotation>
<xs:documentation>AccessPointState item.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="EnableAccessPoint">
<xs:complexType>
<xs:sequence>
<xs:element name="Token" type="pt:ReferenceToken">
<xs:annotation>
<xs:documentation>Token of the AccessPoint instance to enable.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="EnableAccessPointResponse">
<xs:complexType>
<xs:sequence>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="DisableAccessPoint">
<xs:complexType>
<xs:sequence>
<xs:element name="Token" type="pt:ReferenceToken">
<xs:annotation>
<xs:documentation>Token of the AccessPoint instance to disable.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="DisableAccessPointResponse">
<xs:complexType>
<xs:sequence>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="ExternalAuthorization">
<xs:complexType>
<xs:sequence>
<xs:element name="AccessPointToken" type="pt:ReferenceToken">
<xs:annotation>
<xs:documentation>Token of the Access Point instance.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="CredentialToken" type="pt:ReferenceToken" minOccurs="0">
<xs:annotation>
<xs:documentation>Optional token of the Credential involved.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="Reason" type="xs:string" minOccurs="0">
<xs:annotation>
<xs:documentation>Optional reason for decision.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="Decision" type="tac:Decision">
<xs:annotation>
<xs:documentation>Decision - Granted or Denied.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="ExternalAuthorizationResponse">
<xs:complexType>
<xs:sequence>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
</xs:schema>
</wsdl:types>
<!--===============================-->
<wsdl:message name="GetServiceCapabilitiesRequest">
<wsdl:part name="parameters" element="tac:GetServiceCapabilities"/>
</wsdl:message>
<wsdl:message name="GetServiceCapabilitiesResponse">
<wsdl:part name="parameters" element="tac:GetServiceCapabilitiesResponse"/>
</wsdl:message>
<!--===============================-->
<wsdl:message name="GetAccessPointInfoListRequest">
<wsdl:part name="parameters" element="tac:GetAccessPointInfoList"/>
</wsdl:message>
<wsdl:message name="GetAccessPointInfoListResponse">
<wsdl:part name="parameters" element="tac:GetAccessPointInfoListResponse"/>
</wsdl:message>
<!--===============================-->
<wsdl:message name="GetAccessPointInfoRequest">
<wsdl:part name="parameters" element="tac:GetAccessPointInfo"/>
</wsdl:message>
<wsdl:message name="GetAccessPointInfoResponse">
<wsdl:part name="parameters" element="tac:GetAccessPointInfoResponse"/>
</wsdl:message>
<!--===============================-->
<wsdl:message name="GetAreaInfoListRequest">
<wsdl:part name="parameters" element="tac:GetAreaInfoList"/>
</wsdl:message>
<wsdl:message name="GetAreaInfoListResponse">
<wsdl:part name="parameters" element="tac:GetAreaInfoListResponse"/>
</wsdl:message>
<!--===============================-->
<wsdl:message name="GetAreaInfoRequest">
<wsdl:part name="parameters" element="tac:GetAreaInfo"/>
</wsdl:message>
<wsdl:message name="GetAreaInfoResponse">
<wsdl:part name="parameters" element="tac:GetAreaInfoResponse"/>
</wsdl:message>
<!--===============================-->
<wsdl:message name="GetAccessPointStateRequest">
<wsdl:part name="parameters" element="tac:GetAccessPointState"/>
</wsdl:message>
<wsdl:message name="GetAccessPointStateResponse">
<wsdl:part name="parameters" element="tac:GetAccessPointStateResponse"/>
</wsdl:message>
<!--===============================-->
<wsdl:message name="EnableAccessPointRequest">
<wsdl:part name="parameters" element="tac:EnableAccessPoint"/>
</wsdl:message>
<wsdl:message name="EnableAccessPointResponse">
<wsdl:part name="parameters" element="tac:EnableAccessPointResponse"/>
</wsdl:message>
<!--===============================-->
<wsdl:message name="DisableAccessPointRequest">
<wsdl:part name="parameters" element="tac:DisableAccessPoint"/>
</wsdl:message>
<wsdl:message name="DisableAccessPointResponse">
<wsdl:part name="parameters" element="tac:DisableAccessPointResponse"/>
</wsdl:message>
<!--===============================-->
<wsdl:message name="ExternalAuthorizationRequest">
<wsdl:part name="parameters" element="tac:ExternalAuthorization"/>
</wsdl:message>
<wsdl:message name="ExternalAuthorizationResponse">
<wsdl:part name="parameters" element="tac:ExternalAuthorizationResponse"/>
</wsdl:message>
<!--===============================-->
<!--====== Faults messages ========-->
<wsdl:portType name="PACSPort">
<wsdl:operation name="GetServiceCapabilities">
<wsdl:documentation>
This operation returns the capabilities of the Access Control service.
&lt;/p&gt;&lt;p&gt;
An ONVIF compliant device which provides the Access Control service shall
implement this method.
</wsdl:documentation>
<wsdl:input message="tac:GetServiceCapabilitiesRequest"/>
<wsdl:output message="tac:GetServiceCapabilitiesResponse"/>
</wsdl:operation>
<wsdl:operation name="GetAccessPointInfoList">
<wsdl:documentation>
This operation requests a list of all AccessPointInfo items provided by the device.
An ONVIF compliant device which provides the Access Control service shall implement this
method.
&lt;/p&gt;&lt;p&gt;
A call to this method shall return a StartReference when not all data is returned and more
data is available. The reference shall be valid for retrieving the next set of data.
Please refer section [Retrieving system configuration] for more details.
&lt;/p&gt;&lt;p&gt;
The number of items returned shall not be greater than Limit parameter.
&lt;/p&gt;&lt;p&gt;
</wsdl:documentation>
<wsdl:input message="tac:GetAccessPointInfoListRequest"/>
<wsdl:output message="tac:GetAccessPointInfoListResponse"/>
</wsdl:operation>
<wsdl:operation name="GetAccessPointInfo">
<wsdl:documentation>
This operation requests a list of AccessPointInfo items matching the given tokens.
&lt;/p&gt;&lt;p&gt;
An ONVIF compliant device which provides Access Control service shall implement this method.
&lt;/p&gt;&lt;p&gt;
The device shall ignore tokens it cannot resolve and shall return an empty list if there
are no items matching specified tokens. The device shall not return a fault in this case.
&lt;/p&gt;&lt;p&gt;
If the number of requested items is greater than MaxLimit, a TooManyItems
fault shall be returned.
&lt;/p&gt;&lt;p&gt;
</wsdl:documentation>
<wsdl:input message="tac:GetAccessPointInfoRequest"/>
<wsdl:output message="tac:GetAccessPointInfoResponse"/>
</wsdl:operation>
<wsdl:operation name="GetAreaInfoList">
<wsdl:documentation>
This operation requests a list of all AreaInfo items provided by the device.
An ONVIF compliant device which provides the Access Control service shall implement this
method.
&lt;/p&gt;&lt;p&gt;
A call to this method shall return a StartReference when not all data is returned and more
data is available. The reference shall be valid for retrieving the next set of data.
Please refer section [Retrieving system configuration] for more details.
&lt;/p&gt;&lt;p&gt;
The number of items returned shall not be greater than Limit parameter.
&lt;/p&gt;&lt;p&gt;
</wsdl:documentation>
<wsdl:input message="tac:GetAreaInfoListRequest"/>
<wsdl:output message="tac:GetAreaInfoListResponse"/>
</wsdl:operation>
<wsdl:operation name="GetAreaInfo">
<wsdl:documentation>
This operation requests a list of AreaInfo items matching the given tokens.
&lt;/p&gt;&lt;p&gt;
An ONVIF compliant device which provides Access Control service shall implement this method.
&lt;/p&gt;&lt;p&gt;
The device shall ignore tokens it cannot resolve and shall return an empty list if there
are no items matching specified tokens. The device shall not return a fault in this case.
&lt;/p&gt;&lt;p&gt;
If the number of requested items is greater than MaxLimit, a TooManyItems
fault shall be returned.
&lt;/p&gt;&lt;p&gt;
</wsdl:documentation>
<wsdl:input message="tac:GetAreaInfoRequest"/>
<wsdl:output message="tac:GetAreaInfoResponse"/>
</wsdl:operation>
<wsdl:operation name="GetAccessPointState">
<wsdl:documentation>
This operation requests the AccessPointState for the AccessPoint instance specified by
Token.
&lt;/p&gt;&lt;p&gt;
An ONVIF compliant device that provides Access Control service shall implement this method.
</wsdl:documentation>
<wsdl:input message="tac:GetAccessPointStateRequest"/>
<wsdl:output message="tac:GetAccessPointStateResponse"/>
</wsdl:operation>
<wsdl:operation name="EnableAccessPoint">
<wsdl:documentation>
This operation allows enabling an access point.
&lt;/p&gt;&lt;p&gt;
A device that signals support for DisableAccessPoint capability for a particular AccessPoint
instance shall implement this command.
&lt;/p&gt;&lt;p&gt;
</wsdl:documentation>
<wsdl:input message="tac:EnableAccessPointRequest"/>
<wsdl:output message="tac:EnableAccessPointResponse"/>
</wsdl:operation>
<wsdl:operation name="DisableAccessPoint">
<wsdl:documentation>
This operation allows disabling an access point.
&lt;/p&gt;&lt;p&gt;
A device that signals support for DisableAccessPoint capability for a particular AccessPoint
instance shall implement this command.
&lt;/p&gt;&lt;p&gt;
</wsdl:documentation>
<wsdl:input message="tac:DisableAccessPointRequest"/>
<wsdl:output message="tac:DisableAccessPointResponse"/>
</wsdl:operation>
<wsdl:operation name="ExternalAuthorization">
<wsdl:documentation>
This operation allows to Deny or Grant decision at an AccessPoint instance.
&lt;/p&gt;&lt;p&gt;
A device that signals support for ExternalAuthorization capability for a particular
AccessPoint instance shall implement this method.
</wsdl:documentation>
<wsdl:input message="tac:ExternalAuthorizationRequest"/>
<wsdl:output message="tac:ExternalAuthorizationResponse"/>
</wsdl:operation>
</wsdl:portType>
<!--===============================-->
<wsdl:binding name="PACSBinding" type="tac:PACSPort">
<wsdl:documentation>
Copyright (c) 2010-2013 by ONVIF: Open Network Video Interface Forum. All rights reserved.
<br/>
This is the initial minimized version of the Access Control service
aimed at the first PACS Profile C.
<br/>
The AccessControl service implements the Authentication and
Authorization functionality and controls the actions to get
access to various Access Points controlling access to Doors and Areas.
<br/>
The basic data structures used by the service are:
* CredentialInfo holding basic information of a credential.
<br/>
* AccessPointInfo holding basic information on how access is controlled in
one direction for a door (from which area to which area) defined in the DoorControl service.
<br/>
</wsdl:documentation>
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<!--===============================-->
<wsdl:operation name="GetServiceCapabilities">
<soap:operation
soapAction="http://www.onvif.org/ver10/accesscontrol/wsdl/GetServiceCapabilities"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<!--===============================-->
<wsdl:operation name="GetAccessPointInfoList">
<soap:operation
soapAction="http://www.onvif.org/ver10/accesscontrol/wsdl/GetAccessPointInfoList"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<!--===============================-->
<wsdl:operation name="GetAccessPointInfo">
<soap:operation
soapAction="http://www.onvif.org/ver10/accesscontrol/wsdl/GetAccessPointInfo"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<!--===============================-->
<wsdl:operation name="GetAreaInfoList">
<soap:operation soapAction="http://www.onvif.org/ver10/accesscontrol/wsdl/GetAreaInfoList"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<!--===============================-->
<wsdl:operation name="GetAreaInfo">
<soap:operation soapAction="http://www.onvif.org/ver10/accesscontrol/wsdl/GetAreaInfo"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<!--===============================-->
<wsdl:operation name="GetAccessPointState">
<soap:operation
soapAction="http://www.onvif.org/ver10/accesscontrol/wsdl/GetAccessPointState"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<!--===============================-->
<wsdl:operation name="EnableAccessPoint">
<soap:operation soapAction="http://www.onvif.org/ver10/accesscontrol/wsdl/EnableAccessPoint"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<!--===============================-->
<wsdl:operation name="DisableAccessPoint">
<soap:operation
soapAction="http://www.onvif.org/ver10/accesscontrol/wsdl/DisableAccessPoint"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<!--===============================-->
<wsdl:operation name="ExternalAuthorization">
<soap:operation
soapAction="http://www.onvif.org/ver10/accesscontrol/wsdl/ExternalAuthorization"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<!--===============================-->
</wsdl:binding>
<!--===============================-->
<!--===============================-->
<wsdl:service name="PACSService">
<wsdl:port name="PACSPort" binding="tac:PACSBinding">
<soap:address location="http://www.onvif.org/ver10/accesscontrol/wsdl"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>

View File

@ -0,0 +1,695 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="../../../ver20/util/onvif-wsdl-viewer.xsl"?>
<!--
Copyright (c) 2010-2015 by ONVIF: Open Network Video Interface Forum. All rights reserved.
Recipients of this document may copy, distribute, publish, or display this
document so long as this copyright notice, license and disclaimer are
retained with all copies of the document.
THIS DOCUMENT IS PROVIDED "AS IS," AND THE CORPORATION AND ITS MEMBERS AND
THEIR AFFILIATES, MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED,
INCLUDING BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, OR TITLE;
THAT THE CONTENTS OF THIS DOCUMENT ARE SUITABLE FOR ANY PURPOSE;
OR THAT THE IMPLEMENTATION OF SUCH CONTENTS WILL NOT INFRINGE ANY PATENTS,
COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.
IN NO EVENT WILL THE CORPORATION OR ITS MEMBERS OR THEIR AFFILIATES BE LIABLE
FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL, PUNITIVE OR CONSEQUENTIAL
DAMAGES, ARISING OUT OF OR RELATING TO ANY USE OR DISTRIBUTION OF THIS
DOCUMENT, WHETHER OR NOT (1) THE CORPORATION, MEMBERS OR THEIR AFFILIATES
HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES, OR (2) SUCH DAMAGES
WERE REASONABLY FORESEEABLE, AND ARISING OUT OF OR RELATING TO ANY USE OR
DISTRIBUTION OF THIS DOCUMENT.
THE FOREGOING DISCLAIMER AND LIMITATION ON LIABILITY DO NOT APPLY TO,
INVALIDATE, OR LIMIT REPRESENTATIONS AND WARRANTIES MADE BY THE MEMBERS
AND THEIR RESPECTIVE AFFILIATES TO THE CORPORATION AND OTHER MEMBERS IN
CERTAIN WRITTEN POLICIES OF THE CORPORATION.
-->
<wsdl:definitions
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap12/"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:tar="http://www.onvif.org/ver10/accessrules/wsdl" name="AccessRulesService"
targetNamespace="http://www.onvif.org/ver10/accessrules/wsdl">
<!-- The data types definition for the 'Access Rules Service' -->
<wsdl:types>
<xs:schema targetNamespace="http://www.onvif.org/ver10/accessrules/wsdl"
xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:pt="http://www.onvif.org/ver10/pacs"
xmlns:tar="http://www.onvif.org/ver10/accessrules/wsdl" elementFormDefault="qualified"
version="1.0">
<xs:import namespace="http://www.onvif.org/ver10/pacs" schemaLocation="../../pacs/types.xsd"/>
<!--ServiceCapabilities definitions-->
<xs:complexType name="ServiceCapabilities">
<xs:annotation>
<xs:documentation>
The service capabilities reflect optional functionality of a service. The information is
static
and does not change during device operation. The following capabilities are available:
</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:any namespace="##any" minOccurs="0" maxOccurs="unbounded" processContents="lax"/>
</xs:sequence>
<xs:attribute name="MaxLimit" use="required">
<xs:annotation>
<xs:documentation>
The maximum number of entries returned by a single Get&lt;Entity&gt;List or Get&lt;Entity&gt;
request. The device shall never return more than this number of entities in a single
response.
</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:unsignedInt">
<xs:minInclusive value="1"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="MaxAccessProfiles" use="required">
<xs:annotation>
<xs:documentation>
Indicates the maximum number of access profiles supported by the device.
</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:unsignedInt">
<xs:minInclusive value="1"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="MaxAccessPoliciesPerAccessProfile" use="required">
<xs:annotation>
<xs:documentation>
Indicates the maximum number of access policies per access profile supported by the
device.
</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:unsignedInt">
<xs:minInclusive value="1"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="MultipleSchedulesPerAccessPointSupported" type="xs:boolean"
use="required">
<xs:annotation>
<xs:documentation>
Indicates whether or not several access policies can refer to the same access point in
an
access profile.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:anyAttribute processContents="lax"/>
</xs:complexType>
<!-- End of definition -->
<!--AccessPolicy definitions-->
<xs:complexType name="AccessPolicy">
<xs:annotation>
<xs:documentation>
The access policy is an association of an access point and a schedule. It defines when
an access
point can be accessed using an access profile which contains this access policy. If an
access
profile contains several access policies specifying different schedules for the same
access
point will result in a union of the schedules.
</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element name="ScheduleToken" type="pt:ReferenceToken">
<xs:annotation>
<xs:documentation>Reference to the schedule used by the access policy
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="Entity" type="pt:ReferenceToken">
<xs:annotation>
<xs:documentation>
Reference to the entity used by the rule engine, the entity type may be specified by
the
optional EntityType field explained below but is typically an access point.
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="EntityType" type="xs:QName" minOccurs="0">
<xs:annotation>
<xs:documentation>
Optional entity type; if missing, an access point type as defined by the ONVIF
Access
Control service should be assumed. This can also be represented by the QName value
“tac:AccessPoint” where tac is the namespace of Access Control Service
Specification.
This field is provided for future extensions; it will allow an access policy being
extended to cover entity types other than access points as well.
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="Extension" type="tar:AccessPolicyExtension" minOccurs="0"/>
</xs:sequence>
<xs:anyAttribute processContents="lax"/>
</xs:complexType>
<xs:complexType name="AccessPolicyExtension">
<xs:sequence>
<xs:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<!-- End of definition -->
<!--AccessProfileInfo definitions-->
<xs:complexType name="AccessProfileInfo">
<xs:annotation>
<xs:documentation>
The AccessProfileInfo structure contains basic information about an access profile. The
device
shall provide the following fields for each AccessProfileInfo.
</xs:documentation>
</xs:annotation>
<xs:complexContent>
<xs:extension base="pt:DataEntity">
<xs:sequence>
<xs:element name="Name" type="pt:Name">
<xs:annotation>
<xs:documentation>A user readable name. It shall be up to 64 characters.
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="Description" type="pt:Description" minOccurs="0">
<xs:annotation>
<xs:documentation>User readable description for the access profile. It shall be up
to 1024 characters.
</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- End of definition -->
<!--AccessProfileInfo definitions-->
<xs:complexType name="AccessProfile">
<xs:annotation>
<xs:documentation>
The access profile structure contains information about the collection of access
policies. The
device shall include all properties of the AccessProfileInfo structure and also a list
of access
policies.
</xs:documentation>
</xs:annotation>
<xs:complexContent>
<xs:extension base="tar:AccessProfileInfo">
<xs:sequence>
<xs:element name="AccessPolicy" type="tar:AccessPolicy" minOccurs="0"
maxOccurs="unbounded">
<xs:annotation>
<xs:documentation>A list of access policy structures, where each access policy
defines during which schedule an access point can be accessed.
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="Extension" type="tar:AccessProfileExtension" minOccurs="0"/>
</xs:sequence>
<xs:anyAttribute processContents="lax"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="AccessProfileExtension">
<xs:sequence>
<xs:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<!-- End of data types definition -->
<!-- #################-->
<!-- Message request / response elements-->
<xs:element name="GetServiceCapabilities">
<xs:complexType>
<xs:sequence/>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="GetServiceCapabilitiesResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="Capabilities" type="tar:ServiceCapabilities">
<xs:annotation>
<xs:documentation>The capability response message contains the requested access
rules
service capabilities using a hierarchical XML capability structure.
</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="GetAccessProfileInfo">
<xs:complexType>
<xs:sequence>
<xs:element name="Token" type="pt:ReferenceToken" minOccurs="1" maxOccurs="unbounded">
<xs:annotation>
<xs:documentation>Tokens of AccessProfileInfo items to get.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="GetAccessProfileInfoResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="AccessProfileInfo" type="tar:AccessProfileInfo" minOccurs="0"
maxOccurs="unbounded">
<xs:annotation>
<xs:documentation>List of AccessProfileInfo items.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="GetAccessProfileInfoList">
<xs:complexType>
<xs:sequence>
<xs:element name="Limit" type="xs:int" minOccurs="0">
<xs:annotation>
<xs:documentation>Maximum number of entries to return. If not specified, less than
one
or higher than what the device supports, the number of items is determined by the
device.
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="StartReference" type="xs:string" minOccurs="0">
<xs:annotation>
<xs:documentation>Start returning entries from this start reference. If not
specified,
entries shall start from the beginning of the dataset.
</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="GetAccessProfileInfoListResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="NextStartReference" type="xs:string" minOccurs="0">
<xs:annotation>
<xs:documentation>StartReference to use in next call to get the following items. If
absent, no more items to get.
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="AccessProfileInfo" type="tar:AccessProfileInfo" minOccurs="0"
maxOccurs="unbounded">
<xs:annotation>
<xs:documentation>List of AccessProfileInfo items.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="GetAccessProfiles">
<xs:complexType>
<xs:sequence>
<xs:element name="Token" type="pt:ReferenceToken" minOccurs="1" maxOccurs="unbounded">
<xs:annotation>
<xs:documentation>Tokens of AccessProfile items to get.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="GetAccessProfilesResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="AccessProfile" type="tar:AccessProfile" minOccurs="0"
maxOccurs="unbounded">
<xs:annotation>
<xs:documentation>List of Access Profile items.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="GetAccessProfileList">
<xs:complexType>
<xs:sequence>
<xs:element name="Limit" type="xs:int" minOccurs="0">
<xs:annotation>
<xs:documentation>Maximum number of entries to return. If not specified, less than
one
or higher than what the device supports, the number of items is determined by the
device.
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="StartReference" type="xs:string" minOccurs="0">
<xs:annotation>
<xs:documentation>Start returning entries from this start reference. If not
specified,
entries shall start from the beginning of the dataset.
</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="GetAccessProfileListResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="NextStartReference" type="xs:string" minOccurs="0">
<xs:annotation>
<xs:documentation>StartReference to use in next call to get the following items. If
absent, no more items to get.
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="AccessProfile" type="tar:AccessProfile" minOccurs="0"
maxOccurs="unbounded">
<xs:annotation>
<xs:documentation>List of Access Profile items.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="CreateAccessProfile">
<xs:complexType>
<xs:sequence>
<xs:element name="AccessProfile" type="tar:AccessProfile">
<xs:annotation>
<xs:documentation>The AccessProfile to create.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="CreateAccessProfileResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="Token" type="pt:ReferenceToken">
<xs:annotation>
<xs:documentation>The Token of created AccessProfile.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="ModifyAccessProfile">
<xs:complexType>
<xs:sequence>
<xs:element name="AccessProfile" type="tar:AccessProfile">
<xs:annotation>
<xs:documentation>The details of Access Profile</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="ModifyAccessProfileResponse">
<xs:complexType>
<xs:sequence>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="DeleteAccessProfile">
<xs:complexType>
<xs:sequence>
<xs:element name="Token" type="pt:ReferenceToken">
<xs:annotation>
<xs:documentation>The token of the access profile to delete.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="DeleteAccessProfileResponse">
<xs:complexType>
<xs:sequence/>
</xs:complexType>
</xs:element>
<!-- #################-->
</xs:schema>
</wsdl:types>
<!--Definition of 'GetServiceCapabilities' message-->
<wsdl:message name="GetServiceCapabilitiesRequest">
<wsdl:part name="parameters" element="tar:GetServiceCapabilities"/>
</wsdl:message>
<wsdl:message name="GetServiceCapabilitiesResponse">
<wsdl:part name="parameters" element="tar:GetServiceCapabilitiesResponse"/>
</wsdl:message>
<!--===============================-->
<!--Definition of 'GetAccessProfileInfo' message-->
<wsdl:message name="GetAccessProfileInfoRequest">
<wsdl:part name="parameters" element="tar:GetAccessProfileInfo"/>
</wsdl:message>
<wsdl:message name="GetAccessProfileInfoResponse">
<wsdl:part name="parameters" element="tar:GetAccessProfileInfoResponse"/>
</wsdl:message>
<!--===============================-->
<!--Definition of 'GetAccessProfileInfoList' message-->
<wsdl:message name="GetAccessProfileInfoListRequest">
<wsdl:part name="parameters" element="tar:GetAccessProfileInfoList"/>
</wsdl:message>
<wsdl:message name="GetAccessProfileInfoListResponse">
<wsdl:part name="parameters" element="tar:GetAccessProfileInfoListResponse"/>
</wsdl:message>
<!--===============================-->
<!--Definition of 'GetAccessProfiles' message-->
<wsdl:message name="GetAccessProfilesRequest">
<wsdl:part name="parameters" element="tar:GetAccessProfiles"/>
</wsdl:message>
<wsdl:message name="GetAccessProfilesResponse">
<wsdl:part name="parameters" element="tar:GetAccessProfilesResponse"/>
</wsdl:message>
<!--===============================-->
<!--Definition of 'GetAccessProfileList' message-->
<wsdl:message name="GetAccessProfileListRequest">
<wsdl:part name="parameters" element="tar:GetAccessProfileList"/>
</wsdl:message>
<wsdl:message name="GetAccessProfileListResponse">
<wsdl:part name="parameters" element="tar:GetAccessProfileListResponse"/>
</wsdl:message>
<!--===============================-->
<!--Definition of 'CreateAccessProfile' message-->
<wsdl:message name="CreateAccessProfileRequest">
<wsdl:part name="parameters" element="tar:CreateAccessProfile"/>
</wsdl:message>
<wsdl:message name="CreateAccessProfileResponse">
<wsdl:part name="parameters" element="tar:CreateAccessProfileResponse"/>
</wsdl:message>
<!--===============================-->
<!--Definition of 'ModifyAccessProfile' message-->
<wsdl:message name="ModifyAccessProfileRequest">
<wsdl:part name="parameters" element="tar:ModifyAccessProfile"/>
</wsdl:message>
<wsdl:message name="ModifyAccessProfileResponse">
<wsdl:part name="parameters" element="tar:ModifyAccessProfileResponse"/>
</wsdl:message>
<!--===============================-->
<!--Definition of 'DeleteAccessProfile' message-->
<wsdl:message name="DeleteAccessProfileRequest">
<wsdl:part name="parameters" element="tar:DeleteAccessProfile"/>
</wsdl:message>
<wsdl:message name="DeleteAccessProfileResponse">
<wsdl:part name="parameters" element="tar:DeleteAccessProfileResponse"/>
</wsdl:message>
<!--===============================-->
<wsdl:portType name="AccessRulesPort">
<wsdl:operation name="GetServiceCapabilities">
<wsdl:documentation>This operation returns the capabilities of the access rules service.
</wsdl:documentation>
<wsdl:input message="tar:GetServiceCapabilitiesRequest"/>
<wsdl:output message="tar:GetServiceCapabilitiesResponse"/>
</wsdl:operation>
<wsdl:operation name="GetAccessProfileInfo">
<wsdl:documentation>
This operation requests a list of AccessProfileInfo items matching the given tokens. The
device shall
ignore tokens it cannot resolve and shall return an empty list if there are no items
matching specified
tokens. The device shall not return a fault in this case.
If the number of requested items is greater than MaxLimit, a TooManyItems fault shall be
returned.
</wsdl:documentation>
<wsdl:input message="tar:GetAccessProfileInfoRequest"/>
<wsdl:output message="tar:GetAccessProfileInfoResponse"/>
</wsdl:operation>
<wsdl:operation name="GetAccessProfileInfoList">
<wsdl:documentation>
This operation requests a list of all of AccessProfileInfo items provided by the device.
A call to this method shall return a StartReference when not all data is returned and more
data is
available. The reference shall be valid for retrieving the next set of data. Please refer
Access Control
Service Specification for more details.
The number of items returned shall not be greater than Limit parameter.
</wsdl:documentation>
<wsdl:input message="tar:GetAccessProfileInfoListRequest"/>
<wsdl:output message="tar:GetAccessProfileInfoListResponse"/>
</wsdl:operation>
<wsdl:operation name="GetAccessProfiles">
<wsdl:documentation>
This operation returns the specified access profile item matching the given tokens.
The device shall ignore tokens it cannot resolve and shall return an empty list if there are
no items
matching specified tokens. The device shall not return a fault in this case.
</wsdl:documentation>
<wsdl:input message="tar:GetAccessProfilesRequest"/>
<wsdl:output message="tar:GetAccessProfilesResponse"/>
</wsdl:operation>
<wsdl:operation name="GetAccessProfileList">
<wsdl:documentation>
This operation requests a list of all of access profile items provided by the device.
A call to this method shall return a StartReference when not all data is returned and more
data is
available. The reference shall be valid for retrieving the next set of data. Please refer
Access Control
Service Specification for more details.
The number of items returned shall not be greater the Limit parameter.
</wsdl:documentation>
<wsdl:input message="tar:GetAccessProfileListRequest"/>
<wsdl:output message="tar:GetAccessProfileListResponse"/>
</wsdl:operation>
<wsdl:operation name="CreateAccessProfile">
<wsdl:documentation>
This operation creates the specified access profile. The token field of the access profile
shall be
empty, the service shall allocate a token for the access profile. The allocated token shall
be returned
in the response. If the client sends any value in the token field, the device shall return
InvalidArgVal
as generic fault code.
In an access profile, if several access policies specifying different schedules for the same
access
point will result in a union of the schedule.
</wsdl:documentation>
<wsdl:input message="tar:CreateAccessProfileRequest"/>
<wsdl:output message="tar:CreateAccessProfileResponse"/>
</wsdl:operation>
<wsdl:operation name="ModifyAccessProfile">
<wsdl:documentation>
This operation will modify the access profile for the specified access profile token. If
several access
policies specifying different schedules for the same access point will result in a union of
the
schedule.
If the device could not store the access profile information then a fault will be generated.
</wsdl:documentation>
<wsdl:input message="tar:ModifyAccessProfileRequest"/>
<wsdl:output message="tar:ModifyAccessProfileResponse"/>
</wsdl:operation>
<wsdl:operation name="DeleteAccessProfile">
<wsdl:documentation>
This operation will delete the specified access profile.
If it is associated with one or more entities some devices may not be able to delete the
access profile,
and consequently a ReferenceInUse fault shall be generated.
If the access profile is deleted, all access policies associated to the access profile will
also be
deleted.
</wsdl:documentation>
<wsdl:input message="tar:DeleteAccessProfileRequest"/>
<wsdl:output message="tar:DeleteAccessProfileResponse"/>
</wsdl:operation>
</wsdl:portType>
<!--Protocol & data format for the operations and messages for the port type 'AccessRulesPort'-->
<wsdl:binding name="AccessRulesBinding" type="tar:AccessRulesPort">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="GetServiceCapabilities">
<soap:operation
soapAction="http://www.onvif.org/ver10/accessrules/wsdl/GetServiceCapabilities"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="GetAccessProfileInfo">
<soap:operation
soapAction="http://www.onvif.org/ver10/accessrules/wsdl/GetAccessProfileInfo"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="GetAccessProfileInfoList">
<soap:operation
soapAction="http://www.onvif.org/ver10/accessrules/wsdl/GetAccessProfileInfoList"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="GetAccessProfiles">
<soap:operation soapAction="http://www.onvif.org/ver10/accessrules/wsdl/GetAccessProfiles"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="GetAccessProfileList">
<soap:operation
soapAction="http://www.onvif.org/ver10/accessrules/wsdl/GetAccessProfileList"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="CreateAccessProfile">
<soap:operation soapAction="http://www.onvif.org/ver10/accessrules/wsdl/CreateAccessProfile"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="ModifyAccessProfile">
<soap:operation soapAction="http://www.onvif.org/ver10/accessrules/wsdl/ModifyAccessProfile"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="DeleteAccessProfile">
<soap:operation soapAction="http://www.onvif.org/ver10/accessrules/wsdl/DeleteAccessProfile"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<!--===============================-->
<!--===============================-->
<wsdl:service name="AccessRulesService">
<wsdl:port name="AccessRulesPort" binding="tar:AccessRulesBinding">
<soap:address location="http://www.onvif.org/ver10/accessrules/wsdl"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,579 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="http://www.onvif.org/onvif/ver20/util/onvif-wsdl-viewer.xsl"?>
<!--
Copyright (c) 2008-2010 by ONVIF: Open Network Video Interface Forum. All rights reserved.
Recipients of this document may copy, distribute, publish, or display this document so long as this copyright notice, license and disclaimer are retained with all copies of the document. No license is granted to modify this document.
THIS DOCUMENT IS PROVIDED "AS IS," AND THE CORPORATION AND ITS MEMBERS AND THEIR AFFILIATES, MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, OR TITLE; THAT THE CONTENTS OF THIS DOCUMENT ARE SUITABLE FOR ANY PURPOSE; OR THAT THE IMPLEMENTATION OF SUCH CONTENTS WILL NOT INFRINGE ANY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.
IN NO EVENT WILL THE CORPORATION OR ITS MEMBERS OR THEIR AFFILIATES BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL, PUNITIVE OR CONSEQUENTIAL DAMAGES, ARISING OUT OF OR RELATING TO ANY USE OR DISTRIBUTION OF THIS DOCUMENT, WHETHER OR NOT (1) THE CORPORATION, MEMBERS OR THEIR AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES, OR (2) SUCH DAMAGES WERE REASONABLY FORESEEABLE, AND ARISING OUT OF OR RELATING TO ANY USE OR DISTRIBUTION OF THIS DOCUMENT. THE FOREGOING DISCLAIMER AND LIMITATION ON LIABILITY DO NOT APPLY TO, INVALIDATE, OR LIMIT REPRESENTATIONS AND WARRANTIES MADE BY THE MEMBERS AND THEIR RESPECTIVE AFFILIATES TO THE CORPORATION AND OTHER MEMBERS IN CERTAIN WRITTEN POLICIES OF THE CORPORATION.
-->
<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:tls="http://www.onvif.org/ver10/display/wsdl"
targetNamespace="http://www.onvif.org/ver10/display/wsdl">
<wsdl:types>
<xs:schema targetNamespace="http://www.onvif.org/ver10/display/wsdl"
xmlns:tt="http://www.onvif.org/ver10/schema" xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified">
<xs:import namespace="http://www.onvif.org/ver10/schema"
schemaLocation="http://www.onvif.org/onvif/ver10/schema/onvif.xsd"/>
<!--===============================-->
<xs:element name="GetServiceCapabilities">
<xs:complexType>
<xs:sequence/>
</xs:complexType>
</xs:element>
<xs:element name="GetServiceCapabilitiesResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="Capabilities" type="tls:Capabilities">
<xs:annotation>
<xs:documentation>The capabilities for the display service is returned in the
Capabilities element.
</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:complexType name="Capabilities">
<xs:sequence>
<xs:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="FixedLayout" type="xs:boolean">
<xs:annotation>
<xs:documentation>Indication that the SetLayout command supports only predefined
layouts.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:anyAttribute processContents="lax"/>
</xs:complexType>
<xs:element name="Capabilities" type="tls:Capabilities"/>
<!--===============================-->
<xs:element name="GetLayout">
<xs:complexType>
<xs:sequence>
<xs:element name="VideoOutput" type="tt:ReferenceToken">
<xs:annotation>
<xs:documentation>Token of the Video Output whose Layout is requested
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="GetLayoutResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="Layout" type="tt:Layout">
<xs:annotation>
<xs:documentation>Current layout of the video output.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="SetLayout">
<xs:complexType>
<xs:sequence>
<xs:element name="VideoOutput" type="tt:ReferenceToken">
<xs:annotation>
<xs:documentation>Token of the Video Output whose Layout shall be changed.
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="Layout" type="tt:Layout">
<xs:annotation>
<xs:documentation>Layout to be set</xs:documentation>
</xs:annotation>
</xs:element>
<xs:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="SetLayoutResponse">
<xs:complexType>
<xs:sequence>
<xs:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="GetDisplayOptions">
<xs:complexType>
<xs:sequence>
<xs:element name="VideoOutput" type="tt:ReferenceToken">
<xs:annotation>
<xs:documentation>Token of the Video Output whose options are requested
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="GetDisplayOptionsResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="LayoutOptions" type="tt:LayoutOptions" minOccurs="0">
<xs:annotation>
<xs:documentation>The LayoutOptions describe the fixed and predefined layouts of a
device. If the device does
not offer fixed layouts and allows setting the layout free this element is empty.
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="CodingCapabilities" type="tt:CodingCapabilities">
<xs:annotation>
<xs:documentation>decoding and encoding capabilities of the device
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="GetPaneConfigurations">
<xs:complexType>
<xs:sequence>
<xs:element name="VideoOutput" type="tt:ReferenceToken">
<xs:annotation>
<xs:documentation>Reference Token of the Video Output whose Pane Configurations are
requested
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="GetPaneConfigurationsResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="PaneConfiguration" type="tt:PaneConfiguration" maxOccurs="unbounded">
<xs:annotation>
<xs:documentation>Contains a list of defined Panes of the specified VideoOutput.
Each VideoOutput has at least one PaneConfiguration.
</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="GetPaneConfiguration">
<xs:complexType>
<xs:sequence>
<xs:element name="VideoOutput" type="tt:ReferenceToken">
<xs:annotation>
<xs:documentation>Reference Token of the Video Output the requested pane belongs
to
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="Pane" type="tt:ReferenceToken">
<xs:annotation>
<xs:documentation>Reference Token of the Pane whose Configuration is requested
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="GetPaneConfigurationResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="PaneConfiguration" type="tt:PaneConfiguration">
<xs:annotation>
<xs:documentation>returns the configuration of the requested pane.
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="SetPaneConfigurations">
<xs:complexType>
<xs:sequence>
<xs:element name="VideoOutput" type="tt:ReferenceToken">
<xs:annotation>
<xs:documentation>Token of the video output whose panes to set.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="PaneConfiguration" type="tt:PaneConfiguration" maxOccurs="unbounded">
<xs:annotation>
<xs:documentation>Pane Configuration to be set.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="SetPaneConfigurationsResponse">
<xs:complexType>
<xs:sequence>
<xs:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="SetPaneConfiguration">
<xs:complexType>
<xs:sequence>
<xs:element name="VideoOutput" type="tt:ReferenceToken">
<xs:annotation>
<xs:documentation>Token of the video output whose panes to set.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="PaneConfiguration" type="tt:PaneConfiguration">
<xs:annotation>
<xs:documentation>Pane Configuration to be set.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="SetPaneConfigurationResponse">
<xs:complexType>
<xs:sequence>
<xs:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="CreatePaneConfiguration">
<xs:complexType>
<xs:sequence>
<xs:element name="VideoOutput" type="tt:ReferenceToken">
<xs:annotation>
<xs:documentation>Token of the video output where the pane shall be created.
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="PaneConfiguration" type="tt:PaneConfiguration">
<xs:annotation>
<xs:documentation>Configuration of the pane to be created.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="CreatePaneConfigurationResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="PaneToken" type="tt:ReferenceToken">
<xs:annotation>
<xs:documentation>Token of the new pane configuration.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="DeletePaneConfiguration">
<xs:complexType>
<xs:sequence>
<xs:element name="VideoOutput" type="tt:ReferenceToken">
<xs:annotation>
<xs:documentation>Token of the video output where the pane shall be deleted.
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="PaneToken" type="tt:ReferenceToken">
<xs:annotation>
<xs:documentation>Token of the pane to be deleted.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="DeletePaneConfigurationResponse">
<xs:complexType>
<xs:sequence>
<xs:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
</wsdl:types>
<wsdl:message name="GetServiceCapabilitiesRequest">
<wsdl:part name="parameters" element="tls:GetServiceCapabilities"/>
</wsdl:message>
<wsdl:message name="GetServiceCapabilitiesResponse">
<wsdl:part name="parameters" element="tls:GetServiceCapabilitiesResponse"/>
</wsdl:message>
<wsdl:message name="GetLayoutRequest">
<wsdl:part name="parameters" element="tls:GetLayout"/>
</wsdl:message>
<wsdl:message name="GetLayoutResponse">
<wsdl:part name="parameters" element="tls:GetLayoutResponse"/>
</wsdl:message>
<wsdl:message name="SetLayoutRequest">
<wsdl:part name="parameters" element="tls:SetLayout"/>
</wsdl:message>
<wsdl:message name="SetLayoutResponse">
<wsdl:part name="parameters" element="tls:SetLayoutResponse"/>
</wsdl:message>
<wsdl:message name="GetDisplayOptionsRequest">
<wsdl:part name="parameters" element="tls:GetDisplayOptions"/>
</wsdl:message>
<wsdl:message name="GetDisplayOptionsResponse">
<wsdl:part name="parameters" element="tls:GetDisplayOptionsResponse"/>
</wsdl:message>
<wsdl:message name="GetPaneConfigurationsRequest">
<wsdl:part name="parameters" element="tls:GetPaneConfigurations"/>
</wsdl:message>
<wsdl:message name="GetPaneConfigurationsResponse">
<wsdl:part name="parameters" element="tls:GetPaneConfigurationsResponse"/>
</wsdl:message>
<wsdl:message name="GetPaneConfigurationRequest">
<wsdl:part name="parameters" element="tls:GetPaneConfiguration"/>
</wsdl:message>
<wsdl:message name="GetPaneConfigurationResponse">
<wsdl:part name="parameters" element="tls:GetPaneConfigurationResponse"/>
</wsdl:message>
<wsdl:message name="SetPaneConfigurationsRequest">
<wsdl:part name="parameters" element="tls:SetPaneConfigurations"/>
</wsdl:message>
<wsdl:message name="SetPaneConfigurationsResponse">
<wsdl:part name="parameters" element="tls:SetPaneConfigurationsResponse"/>
</wsdl:message>
<wsdl:message name="SetPaneConfigurationRequest">
<wsdl:part name="parameters" element="tls:SetPaneConfiguration"/>
</wsdl:message>
<wsdl:message name="SetPaneConfigurationResponse">
<wsdl:part name="parameters" element="tls:SetPaneConfigurationResponse"/>
</wsdl:message>
<wsdl:message name="CreatePaneConfigurationRequest">
<wsdl:part name="parameters" element="tls:CreatePaneConfiguration"/>
</wsdl:message>
<wsdl:message name="CreatePaneConfigurationResponse">
<wsdl:part name="parameters" element="tls:CreatePaneConfigurationResponse"/>
</wsdl:message>
<wsdl:message name="DeletePaneConfigurationRequest">
<wsdl:part name="parameters" element="tls:DeletePaneConfiguration"/>
</wsdl:message>
<wsdl:message name="DeletePaneConfigurationResponse">
<wsdl:part name="parameters" element="tls:DeletePaneConfigurationResponse"/>
</wsdl:message>
<wsdl:portType name="DisplayPort">
<wsdl:operation name="GetServiceCapabilities">
<wsdl:documentation>Returns the capabilities of the display service. The result is returned in
a typed answer.
</wsdl:documentation>
<wsdl:input message="tls:GetServiceCapabilitiesRequest"/>
<wsdl:output message="tls:GetServiceCapabilitiesResponse"/>
</wsdl:operation>
<wsdl:operation name="GetLayout">
<wsdl:documentation>Return the current layout of a video output. The Layout assigns a pane
configuration to a certain area of the display. The layout settings
directly affect a specific video output. The layout consists of a list of PaneConfigurations
and
their associated display areas.
</wsdl:documentation>
<wsdl:input message="tls:GetLayoutRequest"/>
<wsdl:output message="tls:GetLayoutResponse"/>
</wsdl:operation>
<wsdl:operation name="SetLayout">
<wsdl:documentation>Change the layout of a display (e.g. change from
single view to split screen view).The Layout assigns a pane configuration to a certain area
of the display. The layout settings
directly affect a specific video output. The layout consists of a list of PaneConfigurations
and
their associated display areas.
<br/>
A device implementation shall be tolerant against rounding errors when matching a layout
against its fixed set of layouts by accepting differences of at least one percent.
</wsdl:documentation>
<wsdl:input message="tls:SetLayoutRequest"/>
<wsdl:output message="tls:SetLayoutResponse"/>
</wsdl:operation>
<wsdl:operation name="GetDisplayOptions">
<wsdl:documentation>The Display Options contain the supported layouts (LayoutOptions) and the
decoding and
encoding capabilities (CodingCapabilities) of the device. The GetDisplayOptions command
returns both, Layout and Coding Capabilities, of a VideoOutput.
</wsdl:documentation>
<wsdl:input message="tls:GetDisplayOptionsRequest"/>
<wsdl:output message="tls:GetDisplayOptionsResponse"/>
</wsdl:operation>
<wsdl:operation name="GetPaneConfigurations">
<wsdl:documentation>List all currently defined panes of a device for a specified video output
(regardless if this pane is visible at a moment). A Pane is a display area on the monitor
that is attached to a video output. A pane has a
PaneConfiguration that describes which entities are associated with the pane. A client has
to configure the pane according to the connection to be established by setting the
AudioOutput and/or AudioSourceToken. If a Token is not set, the corresponding session will
not be established.
</wsdl:documentation>
<wsdl:input message="tls:GetPaneConfigurationsRequest"/>
<wsdl:output message="tls:GetPaneConfigurationsResponse"/>
</wsdl:operation>
<wsdl:operation name="GetPaneConfiguration">
<wsdl:documentation>Retrieve the pane configuration for a pane token.</wsdl:documentation>
<wsdl:input message="tls:GetPaneConfigurationRequest"/>
<wsdl:output message="tls:GetPaneConfigurationResponse"/>
</wsdl:operation>
<wsdl:operation name="SetPaneConfigurations">
<wsdl:documentation>Modify one or more configurations of the specified video output.
This method will only modify the provided configurations and leave the others unchanged.
Use <a href="#op.DeletePaneConfiguration">DeletePaneConfiguration</a> to remove pane
configurations.
</wsdl:documentation>
<wsdl:input message="tls:SetPaneConfigurationsRequest"/>
<wsdl:output message="tls:SetPaneConfigurationsResponse"/>
</wsdl:operation>
<wsdl:operation name="SetPaneConfiguration">
<wsdl:documentation>This command changes the configuration of the specified pane (tbd)
</wsdl:documentation>
<wsdl:input message="tls:SetPaneConfigurationRequest"/>
<wsdl:output message="tls:SetPaneConfigurationResponse"/>
</wsdl:operation>
<wsdl:operation name="CreatePaneConfiguration">
<wsdl:documentation>Create a new pane configuration describing the streaming and coding
settings for a display area.
<br/>
This optional method is only supported by devices that signal support of dynamic pane
creation via their capabilities.
<br/>
The content of the Token field may be ignored by the device.
</wsdl:documentation>
<wsdl:input message="tls:CreatePaneConfigurationRequest"/>
<wsdl:output message="tls:CreatePaneConfigurationResponse"/>
</wsdl:operation>
<wsdl:operation name="DeletePaneConfiguration">
<wsdl:documentation>Delete a pane configuration. A service must respond with an error if the
pane configuration
is in use by the current layout.
<br/>
This optional method is only supported by devices that signal support of dynamic pane
creation via their capabilities.
</wsdl:documentation>
<wsdl:input message="tls:DeletePaneConfigurationRequest"/>
<wsdl:output message="tls:DeletePaneConfigurationResponse"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="DisplayBinding" type="tls:DisplayPort">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="GetServiceCapabilities">
<soap:operation soapAction="http://www.onvif.org/ver10/display/wsdl/GetServiceCapabilities"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="GetLayout">
<soap:operation soapAction="http://www.onvif.org/ver10/display/wsdl/GetLayout"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="SetLayout">
<soap:operation soapAction="http://www.onvif.org/ver10/display/wsdl/SetLayout"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="GetDisplayOptions">
<soap:operation soapAction="http://www.onvif.org/ver10/display/wsdl/GetDisplayOptions"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="GetPaneConfigurations">
<soap:operation soapAction="http://www.onvif.org/ver10/display/wsdl/GetPaneConfigurations"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="GetPaneConfiguration">
<soap:operation soapAction="http://www.onvif.org/ver10/display/wsdl/GetPaneConfiguration"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="SetPaneConfigurations">
<soap:operation soapAction="http://www.onvif.org/ver10/display/wsdl/SetPaneConfigurations"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="SetPaneConfiguration">
<soap:operation soapAction="http://www.onvif.org/ver10/display/wsdl/SetPaneConfiguration"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="CreatePaneConfiguration">
<soap:operation soapAction="http://www.onvif.org/ver10/display/wsdl/CreatePaneConfiguration"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="DeletePaneConfiguration">
<soap:operation soapAction="http://www.onvif.org/ver10/display/wsdl/DeletePaneConfiguration"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<!--===============================-->
<!--===============================-->
<wsdl:service name="DisplayService">
<wsdl:port name="DisplayPort" binding="tls:DisplayBinding">
<soap:address location="http://www.onvif.org/ver10/display/wsdl"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,878 @@
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="../../../ver20/util/onvif-wsdl-viewer.xsl"?>
<!--
Note that the location of the document has been changed to reflect the namespace.
Copyright (c) 2008-2015 by ONVIF: Open Network Video Interface Forum. All rights reserved.
Recipients of this document may copy, distribute, publish, or display this document so long as this copyright notice, license and disclaimer are retained with all copies of the document. No license is granted to modify this document.
THIS DOCUMENT IS PROVIDED "AS IS," AND THE CORPORATION AND ITS MEMBERS AND THEIR AFFILIATES, MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, OR TITLE; THAT THE CONTENTS OF THIS DOCUMENT ARE SUITABLE FOR ANY PURPOSE; OR THAT THE IMPLEMENTATION OF SUCH CONTENTS WILL NOT INFRINGE ANY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.
IN NO EVENT WILL THE CORPORATION OR ITS MEMBERS OR THEIR AFFILIATES BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL, PUNITIVE OR CONSEQUENTIAL DAMAGES, ARISING OUT OF OR RELATING TO ANY USE OR DISTRIBUTION OF THIS DOCUMENT, WHETHER OR NOT (1) THE CORPORATION, MEMBERS OR THEIR AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES, OR (2) SUCH DAMAGES WERE REASONABLY FORESEEABLE, AND ARISING OUT OF OR RELATING TO ANY USE OR DISTRIBUTION OF THIS DOCUMENT. THE FOREGOING DISCLAIMER AND LIMITATION ON LIABILITY DO NOT APPLY TO, INVALIDATE, OR LIMIT REPRESENTATIONS AND WARRANTIES MADE BY THE MEMBERS AND THEIR RESPECTIVE AFFILIATES TO THE CORPORATION AND OTHER MEMBERS IN CERTAIN WRITTEN POLICIES OF THE CORPORATION.
-->
<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap12/"
xmlns:wsa="http://www.w3.org/2005/08/addressing" xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:wsnt="http://docs.oasis-open.org/wsn/b-2" xmlns:wstop="http://docs.oasis-open.org/wsn/t-1"
xmlns:wsntw="http://docs.oasis-open.org/wsn/bw-2"
xmlns:tev="http://www.onvif.org/ver10/events/wsdl"
xmlns:wsrf-rw="http://docs.oasis-open.org/wsrf/rw-2"
xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl"
targetNamespace="http://www.onvif.org/ver10/events/wsdl">
<wsdl:import namespace="http://docs.oasis-open.org/wsn/bw-2"
location="http://docs.oasis-open.org/wsn/bw-2.wsdl"/>
<wsdl:types>
<xs:schema targetNamespace="http://www.onvif.org/ver10/events/wsdl"
xmlns:wstop="http://docs.oasis-open.org/wsn/t-1"
xmlns:wsnt="http://docs.oasis-open.org/wsn/b-2" elementFormDefault="qualified" version="2.6">
<xs:import namespace="http://www.w3.org/2005/08/addressing"
schemaLocation="http://www.w3.org/2005/08/addressing/ws-addr.xsd"/>
<xs:import namespace="http://docs.oasis-open.org/wsn/t-1"
schemaLocation="http://docs.oasis-open.org/wsn/t-1.xsd"/>
<xs:import namespace="http://docs.oasis-open.org/wsn/b-2"
schemaLocation="http://docs.oasis-open.org/wsn/b-2.xsd"/>
<!-- Message Request/Responses elements -->
<!--===============================-->
<xs:element name="GetServiceCapabilities">
<xs:complexType>
<xs:sequence/>
</xs:complexType>
</xs:element>
<xs:element name="GetServiceCapabilitiesResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="Capabilities" type="tev:Capabilities">
<xs:annotation>
<xs:documentation>The capabilities for the event service is returned in the
Capabilities element.
</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:complexType name="Capabilities">
<xs:sequence>
<xs:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="WSSubscriptionPolicySupport" type="xs:boolean">
<xs:annotation>
<xs:documentation>Indicates that the WS Subscription policy is supported.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="WSPullPointSupport" type="xs:boolean">
<xs:annotation>
<xs:documentation>Indicates that the WS Pull Point is supported.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="WSPausableSubscriptionManagerInterfaceSupport" type="xs:boolean">
<xs:annotation>
<xs:documentation>Indicates that the WS Pausable Subscription Manager Interface is
supported.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="MaxNotificationProducers" type="xs:int">
<xs:annotation>
<xs:documentation>Maximum number of supported notification producers as defined by
WS-BaseNotification.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="MaxPullPoints" type="xs:int">
<xs:annotation>
<xs:documentation>Maximum supported number of notification pull points.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="PersistentNotificationStorage" type="xs:boolean">
<xs:annotation>
<xs:documentation>Indication if the device supports persistent notification storage.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:anyAttribute processContents="lax"/>
</xs:complexType>
<xs:element name="Capabilities" type="tev:Capabilities"/>
<!--===============================-->
<xs:element name="CreatePullPointSubscription">
<xs:complexType>
<xs:sequence>
<xs:element name="Filter" type="wsnt:FilterType" minOccurs="0">
<xs:annotation>
<xs:documentation>Optional XPATH expression to select specific topics.
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="InitialTerminationTime" type="wsnt:AbsoluteOrRelativeTimeType"
nillable="true" minOccurs="0">
<xs:annotation>
<xs:documentation>Initial termination time.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="SubscriptionPolicy" minOccurs="0">
<xs:annotation>
<xs:documentation>Refer to <a
href="http://docs.oasis-open.org/wsn/wsn-ws_base_notification-1.3-spec-os.htm">Web
Services Base Notification 1.3 (WS-BaseNotification)</a>.
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:any namespace="##any" processContents="lax" minOccurs="0"
maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="CreatePullPointSubscriptionResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="SubscriptionReference" type="wsa:EndpointReferenceType">
<xs:annotation>
<xs:documentation>Endpoint reference of the subscription to be used for pulling the
messages.
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element ref="wsnt:CurrentTime">
<xs:annotation>
<xs:documentation>Current time of the server for synchronization purposes.
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element ref="wsnt:TerminationTime">
<xs:annotation>
<xs:documentation>Date time when the PullPoint will be shut down without further
pull requests.
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="PullMessages">
<xs:complexType>
<xs:sequence>
<xs:element name="Timeout" type="xs:duration">
<xs:annotation>
<xs:documentation>Maximum time to block until this method returns.
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="MessageLimit" type="xs:int">
<xs:annotation>
<xs:documentation>Upper limit for the number of messages to return at once. A server
implementation may decide to return less messages.
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="PullMessagesResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="CurrentTime" type="xs:dateTime">
<xs:annotation>
<xs:documentation>The date and time when the messages have been delivered by the web
server to the client.
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="TerminationTime" type="xs:dateTime">
<xs:annotation>
<xs:documentation>Date time when the PullPoint will be shut down without further
pull requests.
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element ref="wsnt:NotificationMessage" minOccurs="0" maxOccurs="unbounded">
<xs:annotation>
<xs:documentation>List of messages. This list shall be empty in case of a timeout.
</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="PullMessagesFaultResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="MaxTimeout" type="xs:duration">
<xs:annotation>
<xs:documentation>Maximum timeout supported by the device.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="MaxMessageLimit" type="xs:int">
<xs:annotation>
<xs:documentation>Maximum message limit supported by the device.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="Seek">
<xs:complexType>
<xs:sequence>
<xs:element name="UtcTime" type="xs:dateTime">
<xs:annotation>
<xs:documentation>The date and time to match against stored messages.
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="Reverse" type="xs:boolean" minOccurs="0" maxOccurs="1">
<xs:annotation>
<xs:documentation>Reverse the pull direction of PullMessages.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="SeekResponse">
<xs:complexType>
<xs:sequence/>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="SetSynchronizationPoint">
<xs:complexType>
<xs:sequence/>
</xs:complexType>
</xs:element>
<xs:element name="SetSynchronizationPointResponse">
<xs:complexType>
<xs:sequence/>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="GetEventProperties">
<xs:complexType>
<xs:sequence/>
</xs:complexType>
</xs:element>
<xs:element name="GetEventPropertiesResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="TopicNamespaceLocation" type="xs:anyURI" minOccurs="1"
maxOccurs="unbounded">
<xs:annotation>
<xs:documentation>List of topic namespaces supported.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element ref="wsnt:FixedTopicSet">
<xs:annotation>
<xs:documentation>True when topicset is fixed for all times.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element ref="wstop:TopicSet">
<xs:annotation>
<xs:documentation>Set of topics supported.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element ref="wsnt:TopicExpressionDialect" minOccurs="1" maxOccurs="unbounded">
<xs:annotation>
<xs:documentation>
Defines the XPath expression syntax supported for matching topic expressions.
<br/>
The following TopicExpressionDialects are mandatory for an ONVIF compliant device
:
<ul type="disc">
<li>http://docs.oasis-open.org/wsn/t-1/TopicExpression/Concrete</li>
<li>http://www.onvif.org/ver10/tev/topicExpression/ConcreteSet.</li>
</ul>
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="MessageContentFilterDialect" type="xs:anyURI" minOccurs="1"
maxOccurs="unbounded">
<xs:annotation>
<xs:documentation>
Defines the XPath function set supported for message content filtering.
<br/>
The following MessageContentFilterDialects should be returned if a device supports
the message content filtering:
<ul type="disc">
<li>http://www.onvif.org/ver10/tev/messageContentFilter/ItemFilter.</li>
</ul>
A device that does not support any MessageContentFilterDialect returns a single
empty url.
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="ProducerPropertiesFilterDialect" type="xs:anyURI" minOccurs="0"
maxOccurs="unbounded">
<xs:annotation>
<xs:documentation>
Optional ProducerPropertiesDialects. Refer to <a
href="http://docs.oasis-open.org/wsn/wsn-ws_base_notification-1.3-spec-os.htm">Web
Services Base Notification 1.3 (WS-BaseNotification)
</a> for advanced filtering.
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="MessageContentSchemaLocation" type="xs:anyURI" minOccurs="1"
maxOccurs="unbounded">
<xs:annotation>
<xs:documentation>
The Message Content Description Language allows referencing
of vendor-specific types. In order to ease the integration of such types into a
client application,
the GetEventPropertiesResponse shall list all URI locations to schema files whose
types are
used in the description of notifications, with MessageContentSchemaLocation
elements.
<br/>
This list shall at least contain the URI of the ONVIF schema file.
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded">
<xs:annotation>
<xs:documentation/>
</xs:annotation>
</xs:any>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:complexType name="SubscriptionPolicy">
<xs:annotation>
<xs:documentation>Optional ONVIF defined pull point subscription policies
</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="ChangedOnly" type="xs:boolean">
<xs:annotation>
<xs:documentation>The pullpoint should not provide Initialized nor Deleted events for
Properties.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:anyAttribute processContents="lax"/>
</xs:complexType>
<!--===============================-->
</xs:schema>
</wsdl:types>
<wsdl:message name="GetServiceCapabilitiesRequest">
<wsdl:part name="parameters" element="tev:GetServiceCapabilities"/>
</wsdl:message>
<wsdl:message name="GetServiceCapabilitiesResponse">
<wsdl:part name="parameters" element="tev:GetServiceCapabilitiesResponse"/>
</wsdl:message>
<wsdl:message name="CreatePullPointSubscriptionRequest">
<wsdl:part name="parameters" element="tev:CreatePullPointSubscription"/>
</wsdl:message>
<wsdl:message name="CreatePullPointSubscriptionResponse">
<wsdl:part name="parameters" element="tev:CreatePullPointSubscriptionResponse"/>
</wsdl:message>
<wsdl:message name="PullMessagesRequest">
<wsdl:part name="parameters" element="tev:PullMessages"/>
</wsdl:message>
<wsdl:message name="PullMessagesResponse">
<wsdl:part name="parameters" element="tev:PullMessagesResponse"/>
</wsdl:message>
<wsdl:message name="PullMessagesFaultResponse">
<wsdl:part name="parameters" element="tev:PullMessagesFaultResponse"/>
</wsdl:message>
<wsdl:message name="SeekRequest">
<wsdl:part name="parameters" element="tev:Seek"/>
</wsdl:message>
<wsdl:message name="SeekResponse">
<wsdl:part name="parameters" element="tev:SeekResponse"/>
</wsdl:message>
<wsdl:message name="SetSynchronizationPointRequest">
<wsdl:part name="parameters" element="tev:SetSynchronizationPoint"/>
</wsdl:message>
<wsdl:message name="SetSynchronizationPointResponse">
<wsdl:part name="parameters" element="tev:SetSynchronizationPointResponse"/>
</wsdl:message>
<wsdl:message name="GetEventPropertiesRequest">
<wsdl:part name="parameters" element="tev:GetEventProperties"/>
</wsdl:message>
<wsdl:message name="GetEventPropertiesResponse">
<wsdl:part name="parameters" element="tev:GetEventPropertiesResponse"/>
</wsdl:message>
<wsdl:portType name="EventPortType">
<wsdl:operation name="GetServiceCapabilities">
<wsdl:documentation>Returns the capabilities of the event service. The result is returned in a
typed answer.
</wsdl:documentation>
<wsdl:input message="tev:GetServiceCapabilitiesRequest"
wsaw:Action="http://www.onvif.org/ver10/events/wsdl/EventPortType/GetServiceCapabilitiesRequest"/>
<wsdl:output message="tev:GetServiceCapabilitiesResponse"
wsaw:Action="http://www.onvif.org/ver10/events/wsdl/EventPortType/GetServiceCapabilitiesResponse"/>
</wsdl:operation>
<wsdl:operation name="CreatePullPointSubscription">
<wsdl:documentation>This method returns a PullPointSubscription that can be polled using
PullMessages.
This message contains the same elements as the SubscriptionRequest of the
WS-BaseNotification without the ConsumerReference.
<br/>
If no Filter is specified the pullpoint notifies all occurring events to the client.
<br/>
This method is mandatory.
</wsdl:documentation>
<wsdl:input message="tev:CreatePullPointSubscriptionRequest"
wsaw:Action="http://www.onvif.org/ver10/events/wsdl/EventPortType/CreatePullPointSubscriptionRequest"/>
<wsdl:output message="tev:CreatePullPointSubscriptionResponse"
wsaw:Action="http://www.onvif.org/ver10/events/wsdl/EventPortType/CreatePullPointSubscriptionResponse"/>
<wsdl:fault name="ResourceUnknownFault" message="wsrf-rw:ResourceUnknownFault"/>
<wsdl:fault name="InvalidFilterFault" message="wsntw:InvalidFilterFault"/>
<wsdl:fault name="TopicExpressionDialectUnknownFault"
message="wsntw:TopicExpressionDialectUnknownFault"/>
<wsdl:fault name="InvalidTopicExpressionFault" message="wsntw:InvalidTopicExpressionFault"/>
<wsdl:fault name="TopicNotSupportedFault" message="wsntw:TopicNotSupportedFault"/>
<wsdl:fault name="InvalidProducerPropertiesExpressionFault"
message="wsntw:InvalidProducerPropertiesExpressionFault"/>
<wsdl:fault name="InvalidMessageContentExpressionFault"
message="wsntw:InvalidMessageContentExpressionFault"/>
<wsdl:fault name="UnacceptableInitialTerminationTimeFault"
message="wsntw:UnacceptableInitialTerminationTimeFault"/>
<wsdl:fault name="UnrecognizedPolicyRequestFault"
message="wsntw:UnrecognizedPolicyRequestFault"/>
<wsdl:fault name="UnsupportedPolicyRequestFault"
message="wsntw:UnsupportedPolicyRequestFault"/>
<wsdl:fault name="NotifyMessageNotSupportedFault"
message="wsntw:NotifyMessageNotSupportedFault"/>
<wsdl:fault name="SubscribeCreationFailedFault" message="wsntw:SubscribeCreationFailedFault"/>
</wsdl:operation>
<wsdl:operation name="GetEventProperties">
<wsdl:documentation>The WS-BaseNotification specification defines a set of OPTIONAL
WS-ResouceProperties.
This specification does not require the implementation of the WS-ResourceProperty interface.
Instead, the subsequent direct interface shall be implemented by an ONVIF compliant device
in order to provide information about the FilterDialects, Schema files and topics supported
by
the device.
</wsdl:documentation>
<wsdl:input message="tev:GetEventPropertiesRequest"
wsaw:Action="http://www.onvif.org/ver10/events/wsdl/EventPortType/GetEventPropertiesRequest"/>
<wsdl:output message="tev:GetEventPropertiesResponse"
wsaw:Action="http://www.onvif.org/ver10/events/wsdl/EventPortType/GetEventPropertiesResponse"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:portType name="PullPointSubscription">
<wsdl:operation name="PullMessages">
<wsdl:documentation>
This method pulls one or more messages from a PullPoint.
The device shall provide the following PullMessages command for all SubscriptionManager
endpoints returned by the CreatePullPointSubscription command. This method shall not wait
until
the requested number of messages is available but return as soon as at least one message is
available.
<br/>
The command shall at least support a Timeout of one minute. In case a device supports
retrieval of less messages
than requested it shall return these without generating a fault.
</wsdl:documentation>
<wsdl:input message="tev:PullMessagesRequest"
wsaw:Action="http://www.onvif.org/ver10/events/wsdl/PullPointSubscription/PullMessagesRequest"/>
<wsdl:output message="tev:PullMessagesResponse"
wsaw:Action="http://www.onvif.org/ver10/events/wsdl/PullPointSubscription/PullMessagesResponse"/>
<wsdl:fault name="PullMessagesFaultResponse" message="tev:PullMessagesFaultResponse"
wsaw:Action="http://www.onvif.org/ver10/events/wsdl/PullPointSubscription/PullMessages/Fault/PullMessagesFaultResponse"/>
</wsdl:operation>
<wsdl:operation name="Seek">
<wsdl:documentation>
This method readjusts the pull pointer into the past.
A device supporting persistent notification storage shall provide the
following Seek command for all SubscriptionManager endpoints returned by
the CreatePullPointSubscription command. The optional Reverse argument can
be used to reverse the pull direction of the PullMessages command.
<br/>
The UtcTime argument will be matched against the UtcTime attribute on a
NotificationMessage.
</wsdl:documentation>
<wsdl:input message="tev:SeekRequest"
wsaw:Action="http://www.onvif.org/ver10/events/wsdl/PullPointSubscription/SeekRequest"/>
<wsdl:output message="tev:SeekResponse"
wsaw:Action="http://www.onvif.org/ver10/events/wsdl/PullPointSubscription/SeekResponse"/>
</wsdl:operation>
<wsdl:operation name="SetSynchronizationPoint">
<wsdl:documentation>Properties inform a client about property creation, changes and
deletion in a uniform way. When a client wants to synchronize its properties with the
properties of the device, it can request a synchronization point which repeats the current
status of all properties to which a client has subscribed. The PropertyOperation of all
produced notifications is set to “Initialized”. The Synchronization Point is
requested directly from the SubscriptionManager which was returned in either the
SubscriptionResponse or in the CreatePullPointSubscriptionResponse. The property update is
transmitted via the notification transportation of the notification interface. This method
is mandatory.
</wsdl:documentation>
<wsdl:input message="tev:SetSynchronizationPointRequest"
wsaw:Action="http://www.onvif.org/ver10/events/wsdl/PullPointSubscription/SetSynchronizationPointRequest"/>
<wsdl:output message="tev:SetSynchronizationPointResponse"
wsaw:Action="http://www.onvif.org/ver10/events/wsdl/PullPointSubscription/SetSynchronizationPointResponse"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="PullPointSubscriptionBinding" type="tev:PullPointSubscription">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="PullMessages">
<soap:operation
soapAction="http://www.onvif.org/ver10/events/wsdl/PullPointSubscription/PullMessagesRequest"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
<wsdl:fault name="PullMessagesFaultResponse">
<soap:fault name="PullMessagesFaultResponse" use="literal"/>
</wsdl:fault>
</wsdl:operation>
<wsdl:operation name="Seek">
<soap:operation
soapAction="http://www.onvif.org/ver10/events/wsdl/PullPointSubscription/SeekRequest"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="SetSynchronizationPoint">
<soap:operation
soapAction="http://www.onvif.org/ver10/events/wsdl/PullPointSubscription/SetSynchronizationPointRequest"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:binding name="EventBinding" type="tev:EventPortType">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="GetServiceCapabilities">
<soap:operation
soapAction="http://www.onvif.org/ver10/events/wsdl/EventPortType/GetServiceCapabilitiesRequest"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="CreatePullPointSubscription">
<soap:operation
soapAction="http://www.onvif.org/ver10/events/wsdl/EventPortType/CreatePullPointSubscriptionRequest"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
<wsdl:fault name="ResourceUnknownFault">
<soap:fault name="ResourceUnknownFault" use="literal"/>
</wsdl:fault>
<wsdl:fault name="InvalidFilterFault">
<soap:fault name="InvalidFilterFault" use="literal"/>
</wsdl:fault>
<wsdl:fault name="TopicExpressionDialectUnknownFault">
<soap:fault name="TopicExpressionDialectUnknownFault" use="literal"/>
</wsdl:fault>
<wsdl:fault name="InvalidTopicExpressionFault">
<soap:fault name="InvalidTopicExpressionFault" use="literal"/>
</wsdl:fault>
<wsdl:fault name="TopicNotSupportedFault">
<soap:fault name="TopicNotSupportedFault" use="literal"/>
</wsdl:fault>
<wsdl:fault name="InvalidProducerPropertiesExpressionFault">
<soap:fault name="InvalidProducerPropertiesExpressionFault" use="literal"/>
</wsdl:fault>
<wsdl:fault name="InvalidMessageContentExpressionFault">
<soap:fault name="InvalidMessageContentExpressionFault" use="literal"/>
</wsdl:fault>
<wsdl:fault name="UnacceptableInitialTerminationTimeFault">
<soap:fault name="UnacceptableInitialTerminationTimeFault" use="literal"/>
</wsdl:fault>
<wsdl:fault name="UnrecognizedPolicyRequestFault">
<soap:fault name="UnrecognizedPolicyRequestFault" use="literal"/>
</wsdl:fault>
<wsdl:fault name="UnsupportedPolicyRequestFault">
<soap:fault name="UnsupportedPolicyRequestFault" use="literal"/>
</wsdl:fault>
<wsdl:fault name="NotifyMessageNotSupportedFault">
<soap:fault name="NotifyMessageNotSupportedFault" use="literal"/>
</wsdl:fault>
<wsdl:fault name="SubscribeCreationFailedFault">
<soap:fault name="SubscribeCreationFailedFault" use="literal"/>
</wsdl:fault>
</wsdl:operation>
<wsdl:operation name="GetEventProperties">
<soap:operation
soapAction="http://www.onvif.org/ver10/events/wsdl/EventPortType/GetEventPropertiesRequest"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:binding name="SubscriptionManagerBinding" type="wsntw:SubscriptionManager">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="Renew">
<soap:operation
soapAction="http://docs.oasis-open.org/wsn/bw-2/SubscriptionManager/RenewRequest"/>
<wsdl:input name="RenewRequest">
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output name="RenewResponse">
<soap:body use="literal"/>
</wsdl:output>
<wsdl:fault name="ResourceUnknownFault">
<soap:fault name="ResourceUnknownFault" use="literal"/>
</wsdl:fault>
<wsdl:fault name="UnacceptableTerminationTimeFault">
<soap:fault name="UnacceptableTerminationTimeFault" use="literal"/>
</wsdl:fault>
</wsdl:operation>
<wsdl:operation name="Unsubscribe">
<soap:operation
soapAction="http://docs.oasis-open.org/wsn/bw-2/SubscriptionManager/UnsubscribeRequest"/>
<wsdl:input name="UnsubscribeRequest">
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output name="UnsubscribeResponse">
<soap:body use="literal"/>
</wsdl:output>
<wsdl:fault name="ResourceUnknownFault">
<soap:fault name="ResourceUnknownFault" use="literal"/>
</wsdl:fault>
<wsdl:fault name="UnableToDestroySubscriptionFault">
<soap:fault name="UnableToDestroySubscriptionFault" use="literal"/>
</wsdl:fault>
</wsdl:operation>
</wsdl:binding>
<wsdl:binding name="NotificationProducerBinding" type="wsntw:NotificationProducer">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="Subscribe">
<soap:operation
soapAction="http://docs.oasis-open.org/wsn/bw-2/NotificationProducer/SubscribeRequest"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
<wsdl:fault name="ResourceUnknownFault">
<soap:fault name="ResourceUnknownFault" use="literal"/>
</wsdl:fault>
<wsdl:fault name="InvalidFilterFault">
<soap:fault name="InvalidFilterFault" use="literal"/>
</wsdl:fault>
<wsdl:fault name="TopicExpressionDialectUnknownFault">
<soap:fault name="TopicExpressionDialectUnknownFault" use="literal"/>
</wsdl:fault>
<wsdl:fault name="InvalidTopicExpressionFault">
<soap:fault name="InvalidTopicExpressionFault" use="literal"/>
</wsdl:fault>
<wsdl:fault name="TopicNotSupportedFault">
<soap:fault name="TopicNotSupportedFault" use="literal"/>
</wsdl:fault>
<wsdl:fault name="InvalidProducerPropertiesExpressionFault">
<soap:fault name="InvalidProducerPropertiesExpressionFault" use="literal"/>
</wsdl:fault>
<wsdl:fault name="InvalidMessageContentExpressionFault">
<soap:fault name="InvalidMessageContentExpressionFault" use="literal"/>
</wsdl:fault>
<wsdl:fault name="UnacceptableInitialTerminationTimeFault">
<soap:fault name="UnacceptableInitialTerminationTimeFault" use="literal"/>
</wsdl:fault>
<wsdl:fault name="UnrecognizedPolicyRequestFault">
<soap:fault name="UnrecognizedPolicyRequestFault" use="literal"/>
</wsdl:fault>
<wsdl:fault name="UnsupportedPolicyRequestFault">
<soap:fault name="UnsupportedPolicyRequestFault" use="literal"/>
</wsdl:fault>
<wsdl:fault name="NotifyMessageNotSupportedFault">
<soap:fault name="NotifyMessageNotSupportedFault" use="literal"/>
</wsdl:fault>
<wsdl:fault name="SubscribeCreationFailedFault">
<soap:fault name="SubscribeCreationFailedFault" use="literal"/>
</wsdl:fault>
</wsdl:operation>
<wsdl:operation name="GetCurrentMessage">
<soap:operation
soapAction="http://docs.oasis-open.org/wsn/bw-2/NotificationProducer/GetCurrentMessageRequest"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
<wsdl:fault name="ResourceUnknownFault">
<soap:fault name="ResourceUnknownFault" use="literal"/>
</wsdl:fault>
<wsdl:fault name="TopicExpressionDialectUnknownFault">
<soap:fault name="TopicExpressionDialectUnknownFault" use="literal"/>
</wsdl:fault>
<wsdl:fault name="InvalidTopicExpressionFault">
<soap:fault name="InvalidTopicExpressionFault" use="literal"/>
</wsdl:fault>
<wsdl:fault name="TopicNotSupportedFault">
<soap:fault name="TopicNotSupportedFault" use="literal"/>
</wsdl:fault>
<wsdl:fault name="NoCurrentMessageOnTopicFault">
<soap:fault name="NoCurrentMessageOnTopicFault" use="literal"/>
</wsdl:fault>
<wsdl:fault name="MultipleTopicsSpecifiedFault">
<soap:fault name="MultipleTopicsSpecifiedFault" use="literal"/>
</wsdl:fault>
</wsdl:operation>
</wsdl:binding>
<wsdl:binding name="NotificationConsumerBinding" type="wsntw:NotificationConsumer">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="Notify">
<soap:operation soapAction="http://docs.oasis-open.org/wsn/bw-2/NotificationConsumer/Notify"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
</wsdl:operation>
</wsdl:binding>
<wsdl:binding name="PullPointBinding" type="wsntw:PullPoint">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="GetMessages">
<soap:operation
soapAction="http://docs.oasis-open.org/wsn/bw-2/PullPoint/GetMessagesRequest"/>
<wsdl:input name="GetMessagesRequest">
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output name="GetMessagesResponse">
<soap:body use="literal"/>
</wsdl:output>
<wsdl:fault name="ResourceUnknownFault">
<soap:fault name="ResourceUnknownFault" use="literal"/>
</wsdl:fault>
<wsdl:fault name="UnableToGetMessagesFault">
<soap:fault name="UnableToGetMessagesFault" use="literal"/>
</wsdl:fault>
</wsdl:operation>
<wsdl:operation name="DestroyPullPoint">
<soap:operation
soapAction="http://docs.oasis-open.org/wsn/bw-2/PullPoint/DestroyPullPointRequest"/>
<wsdl:input name="DestroyPullPointRequest">
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output name="DestroyPullPointResponse">
<soap:body use="literal"/>
</wsdl:output>
<wsdl:fault name="ResourceUnknownFault">
<soap:fault name="ResourceUnknownFault" use="literal"/>
</wsdl:fault>
<wsdl:fault name="UnableToDestroyPullPointFault">
<soap:fault name="UnableToDestroyPullPointFault" use="literal"/>
</wsdl:fault>
</wsdl:operation>
<wsdl:operation name="Notify">
<soap:operation soapAction="http://docs.oasis-open.org/wsn/bw-2/PullPoint/Notify"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
</wsdl:operation>
</wsdl:binding>
<wsdl:binding name="CreatePullPointBinding" type="wsntw:CreatePullPoint">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="CreatePullPoint">
<soap:operation
soapAction="http://docs.oasis-open.org/wsn/bw-2/CreatePullPoint/CreatePullPointRequest"/>
<wsdl:input name="CreatePullPointRequest">
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output name="CreatePullPointResponse">
<soap:body use="literal"/>
</wsdl:output>
<wsdl:fault name="UnableToCreatePullPointFault">
<soap:fault name="UnableToCreatePullPointFault" use="literal"/>
</wsdl:fault>
</wsdl:operation>
</wsdl:binding>
<wsdl:binding name="PausableSubscriptionManagerBinding" type="wsntw:PausableSubscriptionManager">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="Renew">
<soap:operation
soapAction="http://docs.oasis-open.org/wsn/bw-2/PausableSubscriptionManager/RenewRequest"/>
<wsdl:input name="RenewRequest">
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output name="RenewResponse">
<soap:body use="literal"/>
</wsdl:output>
<wsdl:fault name="ResourceUnknownFault">
<soap:fault name="ResourceUnknownFault" use="literal"/>
</wsdl:fault>
<wsdl:fault name="UnacceptableTerminationTimeFault">
<soap:fault name="UnacceptableTerminationTimeFault" use="literal"/>
</wsdl:fault>
</wsdl:operation>
<wsdl:operation name="Unsubscribe">
<soap:operation
soapAction="http://docs.oasis-open.org/wsn/bw-2/PausableSubscriptionManager/UnsubscribeRequest"/>
<wsdl:input name="UnsubscribeRequest">
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output name="UnsubscribeResponse">
<soap:body use="literal"/>
</wsdl:output>
<wsdl:fault name="ResourceUnknownFault">
<soap:fault name="ResourceUnknownFault" use="literal"/>
</wsdl:fault>
<wsdl:fault name="UnableToDestroySubscriptionFault">
<soap:fault name="UnableToDestroySubscriptionFault" use="literal"/>
</wsdl:fault>
</wsdl:operation>
<wsdl:operation name="PauseSubscription">
<soap:operation
soapAction="http://docs.oasis-open.org/wsn/bw-2/PausableSubscriptionManager/PauseSubscriptionRequest"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
<wsdl:fault name="ResourceUnknownFault">
<soap:fault name="ResourceUnknownFault" use="literal"/>
</wsdl:fault>
<wsdl:fault name="PauseFailedFault">
<soap:fault name="PauseFailedFault" use="literal"/>
</wsdl:fault>
</wsdl:operation>
<wsdl:operation name="ResumeSubscription">
<soap:operation
soapAction="http://docs.oasis-open.org/wsn/bw-2/PausableSubscriptionManager/ResumeSubscriptionRequest"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
<wsdl:fault name="ResourceUnknownFault">
<soap:fault name="ResourceUnknownFault" use="literal"/>
</wsdl:fault>
<wsdl:fault name="ResumeFailedFault">
<soap:fault name="ResumeFailedFault" use="literal"/>
</wsdl:fault>
</wsdl:operation>
</wsdl:binding>
<!--===============================-->
<!--===============================-->
<wsdl:service name="EventService">
<wsdl:port name="EventPort" binding="tev:EventBinding">
<soap:address location="http://www.onvif.org/ver10/events/wsdl/event.wsdl"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>

View File

@ -0,0 +1,442 @@
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="../../../ver20/util/onvif-wsdl-viewer.xsl"?>
<!--
Copyright (c) 2008-2014 by ONVIF: Open Network Video Interface Forum. All rights reserved.
Recipients of this document may copy, distribute, publish, or display this document so long as this copyright notice, license and disclaimer are retained with all copies of the document. No license is granted to modify this document.
THIS DOCUMENT IS PROVIDED "AS IS," AND THE CORPORATION AND ITS MEMBERS AND THEIR AFFILIATES, MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, OR TITLE; THAT THE CONTENTS OF THIS DOCUMENT ARE SUITABLE FOR ANY PURPOSE; OR THAT THE IMPLEMENTATION OF SUCH CONTENTS WILL NOT INFRINGE ANY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.
IN NO EVENT WILL THE CORPORATION OR ITS MEMBERS OR THEIR AFFILIATES BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL, PUNITIVE OR CONSEQUENTIAL DAMAGES, ARISING OUT OF OR RELATING TO ANY USE OR DISTRIBUTION OF THIS DOCUMENT, WHETHER OR NOT (1) THE CORPORATION, MEMBERS OR THEIR AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES, OR (2) SUCH DAMAGES WERE REASONABLY FORESEEABLE, AND ARISING OUT OF OR RELATING TO ANY USE OR DISTRIBUTION OF THIS DOCUMENT. THE FOREGOING DISCLAIMER AND LIMITATION ON LIABILITY DO NOT APPLY TO, INVALIDATE, OR LIMIT REPRESENTATIONS AND WARRANTIES MADE BY THE MEMBERS AND THEIR RESPECTIVE AFFILIATES TO THE CORPORATION AND OTHER MEMBERS IN CERTAIN WRITTEN POLICIES OF THE CORPORATION.
-->
<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:timg="http://www.onvif.org/ver20/imaging/wsdl" xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:tt="http://www.onvif.org/ver10/schema"
name="ImagingService" targetNamespace="http://www.onvif.org/ver20/imaging/wsdl">
<wsdl:types>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:tt="http://www.onvif.org/ver10/schema"
xmlns:timg="http://www.onvif.org/ver20/imaging/wsdl"
targetNamespace="http://www.onvif.org/ver20/imaging/wsdl" elementFormDefault="qualified"
version="2.5">
<xs:import namespace="http://www.onvif.org/ver10/schema"
schemaLocation="../../../ver10/schema/onvif.xsd"/>
<!-- Message Request/Responses elements -->
<!--===============================-->
<xs:element name="GetServiceCapabilities">
<xs:complexType>
<xs:sequence/>
</xs:complexType>
</xs:element>
<xs:element name="GetServiceCapabilitiesResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="Capabilities" type="timg:Capabilities">
<xs:annotation>
<xs:documentation>The capabilities for the imaging service is returned in the
Capabilities element.
</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:complexType name="Capabilities">
<xs:sequence>
<xs:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="ImageStabilization" type="xs:boolean">
<xs:annotation>
<xs:documentation>Indicates whether or not Image Stabilization feature is supported.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:anyAttribute processContents="lax"/>
</xs:complexType>
<xs:element name="Capabilities" type="timg:Capabilities"/>
<!--===============================-->
<xs:element name="GetImagingSettings">
<xs:complexType>
<xs:sequence>
<xs:element name="VideoSourceToken" type="tt:ReferenceToken">
<xs:annotation>
<xs:documentation>
Reference token to the VideoSource for which the ImagingSettings.
</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="GetImagingSettingsResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="ImagingSettings" type="tt:ImagingSettings20">
<xs:annotation>
<xs:documentation>
ImagingSettings for the VideoSource that was requested.
</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="SetImagingSettings">
<xs:complexType>
<xs:sequence>
<xs:element name="VideoSourceToken" type="tt:ReferenceToken"/>
<xs:element name="ImagingSettings" type="tt:ImagingSettings20"/>
<xs:element name="ForcePersistence" type="xs:boolean" maxOccurs="1" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="SetImagingSettingsResponse">
<xs:complexType/>
</xs:element>
<!--===============================-->
<xs:element name="GetOptions">
<xs:complexType>
<xs:sequence>
<xs:element name="VideoSourceToken" type="tt:ReferenceToken">
<xs:annotation>
<xs:documentation>
Reference token to the VideoSource for which the imaging parameter options are
requested.
</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="GetOptionsResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="ImagingOptions" type="tt:ImagingOptions20">
<xs:annotation>
<xs:documentation>
Valid ranges for the imaging parameters that are categorized as device specific.
</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="Move">
<xs:complexType>
<xs:sequence>
<xs:element name="VideoSourceToken" type="tt:ReferenceToken">
<xs:annotation>
<xs:documentation>
Reference to the VideoSource for the requested move (focus) operation.
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="Focus" type="tt:FocusMove">
<xs:annotation>
<xs:documentation>
Content of the requested move (focus) operation.
</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="MoveResponse">
<xs:complexType>
<xs:sequence/>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="GetMoveOptions">
<xs:complexType>
<xs:sequence>
<xs:element name="VideoSourceToken" type="tt:ReferenceToken">
<xs:annotation>
<xs:documentation>
Reference token to the VideoSource for the requested move options.
</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="GetMoveOptionsResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="MoveOptions" type="tt:MoveOptions20">
<xs:annotation>
<xs:documentation>
Valid ranges for the focus lens move options.
</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="Stop">
<xs:complexType>
<xs:sequence>
<xs:element name="VideoSourceToken" type="tt:ReferenceToken">
<xs:annotation>
<xs:documentation>
Reference token to the VideoSource where the focus movement should be stopped.
</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="StopResponse">
<xs:complexType>
<xs:sequence>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="GetStatus">
<xs:complexType>
<xs:sequence>
<xs:element name="VideoSourceToken" type="tt:ReferenceToken">
<xs:annotation>
<xs:documentation>
Reference token to the VideoSource where the imaging status should be requested.
</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="GetStatusResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="Status" type="tt:ImagingStatus20">
<xs:annotation>
<xs:documentation>
Requested imaging status.
</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
</xs:schema>
</wsdl:types>
<wsdl:message name="GetServiceCapabilitiesRequest">
<wsdl:part name="parameters" element="timg:GetServiceCapabilities"/>
</wsdl:message>
<wsdl:message name="GetServiceCapabilitiesResponse">
<wsdl:part name="parameters" element="timg:GetServiceCapabilitiesResponse"/>
</wsdl:message>
<wsdl:message name="GetImagingSettingsRequest">
<wsdl:part name="parameters" element="timg:GetImagingSettings"/>
</wsdl:message>
<wsdl:message name="GetImagingSettingsResponse">
<wsdl:part name="parameters" element="timg:GetImagingSettingsResponse"/>
</wsdl:message>
<wsdl:message name="SetImagingSettingsRequest">
<wsdl:part name="parameters" element="timg:SetImagingSettings"/>
</wsdl:message>
<wsdl:message name="SetImagingSettingsResponse">
<wsdl:part name="parameters" element="timg:SetImagingSettingsResponse"/>
</wsdl:message>
<wsdl:message name="GetOptionsRequest">
<wsdl:part name="parameters" element="timg:GetOptions"/>
</wsdl:message>
<wsdl:message name="GetOptionsResponse">
<wsdl:part name="parameters" element="timg:GetOptionsResponse"/>
</wsdl:message>
<wsdl:message name="MoveRequest">
<wsdl:part name="parameters" element="timg:Move"/>
</wsdl:message>
<wsdl:message name="MoveResponse">
<wsdl:part name="parameters" element="timg:MoveResponse"/>
</wsdl:message>
<wsdl:message name="GetMoveOptionsRequest">
<wsdl:part name="parameters" element="timg:GetMoveOptions"/>
</wsdl:message>
<wsdl:message name="GetMoveOptionsResponse">
<wsdl:part name="parameters" element="timg:GetMoveOptionsResponse"/>
</wsdl:message>
<wsdl:message name="StopRequest">
<wsdl:part name="parameters" element="timg:Stop"/>
</wsdl:message>
<wsdl:message name="StopResponse">
<wsdl:part name="parameters" element="timg:StopResponse"/>
</wsdl:message>
<wsdl:message name="GetStatusRequest">
<wsdl:part name="parameters" element="timg:GetStatus"/>
</wsdl:message>
<wsdl:message name="GetStatusResponse">
<wsdl:part name="parameters" element="timg:GetStatusResponse"/>
</wsdl:message>
<wsdl:portType name="ImagingPort">
<wsdl:operation name="GetServiceCapabilities">
<wsdl:documentation>Returns the capabilities of the imaging service. The result is returned in
a typed answer.
</wsdl:documentation>
<wsdl:input message="timg:GetServiceCapabilitiesRequest"/>
<wsdl:output message="timg:GetServiceCapabilitiesResponse"/>
</wsdl:operation>
<wsdl:operation name="GetImagingSettings">
<wsdl:documentation>Get the ImagingConfiguration for the requested VideoSource.
</wsdl:documentation>
<wsdl:input message="timg:GetImagingSettingsRequest"/>
<wsdl:output message="timg:GetImagingSettingsResponse"/>
</wsdl:operation>
<wsdl:operation name="SetImagingSettings">
<wsdl:documentation>Set the ImagingConfiguration for the requested VideoSource.
</wsdl:documentation>
<wsdl:input message="timg:SetImagingSettingsRequest"/>
<wsdl:output message="timg:SetImagingSettingsResponse"/>
</wsdl:operation>
<wsdl:operation name="GetOptions">
<wsdl:documentation>This operation gets the valid ranges for the imaging parameters that have
device specific ranges.
This command is mandatory for all device implementing the imaging service. The command
returns all supported parameters and their ranges
such that these can be applied to the SetImagingSettings command.
<br/>
For read-only parameters which cannot be modified via the SetImagingSettings command only a
single option or identical Min and Max values
is provided.
</wsdl:documentation>
<wsdl:input message="timg:GetOptionsRequest"/>
<wsdl:output message="timg:GetOptionsResponse"/>
</wsdl:operation>
<wsdl:operation name="Move">
<wsdl:documentation>The Move command moves the focus lens in an absolute, a relative or in a
continuous manner from its current position.
The speed argument is optional for absolute and relative control, but required for
continuous. If no speed argument is used, the default speed is used.
Focus adjustments through this operation will turn off the autofocus. A device with support
for remote focus control should support absolute,
relative or continuous control through the Move operation. The supported MoveOpions are
signalled via the GetMoveOptions command.
At least one focus control capability is required for this operation to be functional.
<br/>
The move operation contains the following commands:
<br/>
<b>Absolute</b>
Requires position parameter and optionally takes a speed argument. A unitless type is used
by default for focus positioning and speed. Optionally, if supported, the position may be
requested in m-1 units.
<br/>
<b>Relative</b>
Requires distance parameter and optionally takes a speed argument. Negative distance means
negative direction.
<b>Continuous</b>
Requires a speed argument. Negative speed argument means negative direction.
</wsdl:documentation>
<wsdl:input message="timg:MoveRequest"/>
<wsdl:output message="timg:MoveResponse"/>
</wsdl:operation>
<wsdl:operation name="GetMoveOptions">
<wsdl:documentation>Imaging move operation options supported for the Video source.
</wsdl:documentation>
<wsdl:input message="timg:GetMoveOptionsRequest"/>
<wsdl:output message="timg:GetMoveOptionsResponse"/>
</wsdl:operation>
<wsdl:operation name="Stop">
<wsdl:documentation>The Stop command stops all ongoing focus movements of the lense. A device
with support for remote focus control as signalled via
the GetMoveOptions supports this command.<br/>The operation will not affect ongoing
autofocus operation.
</wsdl:documentation>
<wsdl:input message="timg:StopRequest"/>
<wsdl:output message="timg:StopResponse"/>
</wsdl:operation>
<wsdl:operation name="GetStatus">
<wsdl:documentation>Via this command the current status of the Move operation can be
requested. Supported for this command is available if the support for the Move operation is
signalled via GetMoveOptions.
</wsdl:documentation>
<wsdl:input message="timg:GetStatusRequest"/>
<wsdl:output message="timg:GetStatusResponse"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="ImagingBinding" type="timg:ImagingPort">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="GetServiceCapabilities">
<soap:operation soapAction="http://www.onvif.org/ver20/imaging/wsdl/GetServiceCapabilities"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="GetImagingSettings">
<soap:operation soapAction="http://www.onvif.org/ver20/imaging/wsdl/GetImagingSettings"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="SetImagingSettings">
<soap:operation soapAction="http://www.onvif.org/ver20/imaging/wsdl/SetImagingSettings"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="GetOptions">
<soap:operation soapAction="http://www.onvif.org/ver20/imaging/wsdl/GetOptions"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="Move">
<soap:operation soapAction="http://www.onvif.org/ver20/imaging/wsdl/Move"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="Stop">
<soap:operation soapAction="http://www.onvif.org/ver20/imaging/wsdl/FocusStop"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="GetStatus">
<soap:operation soapAction="http://www.onvif.org/ver20/imaging/wsdl/GetStatus"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="GetMoveOptions">
<soap:operation soapAction="http://www.onvif.org/ver20/imaging/wsdl/GetMoveOptions"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="ImagingService">
<wsdl:port name="ImagingPort" binding="timg:ImagingBinding">
<soap:address location="http://www.onvif.org/ver20/imaging/wsdl"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>

View File

@ -0,0 +1,20 @@
<?xml version="1.0"?>
<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog">
<rewriteURI uriStartString="http://" rewritePrefix="local/"/>
<rewriteURI uriStartString="../ver10/device/wsdl/devicemgmt.wsdl"
rewritePrefix="devicemgmt_2.5.wsdl"/>
<rewriteURI uriStartString="../ver10/media/wsdl/media.wsdl" rewritePrefix="media_2.6.wsdl"/>
<rewriteURI uriStartString="http://www.onvif.org/onvif/ver10/schema/onvif.xsd"
rewritePrefix="local/www.onvif.org/ver10/schema/onvif.xsd"/>
<rewriteURI uriStartString="../../../ver10/schema/onvif.xsd"
rewritePrefix="local/www.onvif.org/ver10/schema/onvif.xsd"/>
<rewriteURI uriStartString="../ver10/schema/onvif.xsd"
rewritePrefix="local/www.onvif.org/ver10/schema/onvif.xsd"/>
<rewriteURI uriStartString="types.xsd" rewritePrefix="local/www.onvif.org/ver10/pacs/types.xsd"/>
<rewriteURI uriStartString="../../pacs/types.xsd"
rewritePrefix="local/www.onvif.org/ver10/pacs/types.xsd"/>
<rewriteURI uriStartString="http://www.onvif.org/ver10/pacs"
rewritePrefix="local/www.onvif.org/ver10/pacs/types.xsd"/>
<rewriteURI uriStartString="http://www.onvif.org/ver10/schema"
rewritePrefix="local/www.onvif.org/ver10/schema/onvif.xsd"/>
</catalog>

View File

@ -0,0 +1,582 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
OASIS takes no position regarding the validity or scope of any intellectual property or other rights that might be claimed to pertain to the implementation or use of the technology described in this document or the extent to which any license under such rights might or might not be available; neither does it represent that it has made any effort to identify any such rights. Information on OASIS's procedures with respect to rights in OASIS specifications can be found at the OASIS website. Copies of claims of rights made available for publication and any assurances of licenses to be made available, or the result of an attempt made to obtain a general license or permission for the use of such proprietary rights by implementors or users of this specification, can be obtained from the OASIS Executive Director.
OASIS invites any interested party to bring to its attention any copyrights, patents or patent applications, or other proprietary rights which may cover technology that may be required to implement this specification. Please address the information to the OASIS Executive Director.
Copyright (C) OASIS Open (2004-2006). All Rights Reserved.
This document and translations of it may be copied and furnished to others, and derivative works that comment on or otherwise explain it or assist in its implementation may be prepared, copied, published and distributed, in whole or in part, without restriction of any kind, provided that the above copyright notice and this paragraph are included on all such copies and derivative works. However, this document itself may not be modified in any way, such as by removing the copyright notice or references to OASIS, except as needed for the purpose of developing OASIS specifications, in which case the procedures for copyrights defined in the OASIS Intellectual Property Rights document must be followed, or as required to translate it into languages other than English.
The limited permissions granted above are perpetual and will not be revoked by OASIS or its successors or assigns.
This document and the information contained herein is provided on an "AS IS" basis and OASIS DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
-->
<xsd:schema
targetNamespace="http://docs.oasis-open.org/wsn/b-2"
xmlns:wsnt="http://docs.oasis-open.org/wsn/b-2"
xmlns:wsa="http://www.w3.org/2005/08/addressing"
xmlns:wsrf-bf="http://docs.oasis-open.org/wsrf/bf-2"
xmlns:wstop="http://docs.oasis-open.org/wsn/t-1"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified" attributeFormDefault="unqualified">
<!-- ======================== Imports ============================ -->
<xsd:import namespace="http://www.w3.org/2005/08/addressing"
schemaLocation="http://www.w3.org/2005/08/addressing/ws-addr.xsd"
/>
<xsd:import namespace="http://docs.oasis-open.org/wsrf/bf-2"
schemaLocation="http://docs.oasis-open.org/wsrf/bf-2.xsd"
/>
<xsd:import namespace="http://docs.oasis-open.org/wsn/t-1"
schemaLocation="http://docs.oasis-open.org/wsn/t-1.xsd"
/>
<!-- ===================== Misc. Helper Types ===================== -->
<xsd:complexType name="QueryExpressionType" mixed="true">
<xsd:sequence>
<xsd:any minOccurs="0" maxOccurs="1" processContents="lax"/>
</xsd:sequence>
<xsd:attribute name="Dialect" type="xsd:anyURI" use="required"/>
</xsd:complexType>
<xsd:complexType name="TopicExpressionType" mixed="true">
<xsd:sequence>
<xsd:any minOccurs="0" maxOccurs="1" processContents="lax"/>
</xsd:sequence>
<xsd:attribute name="Dialect" type="xsd:anyURI" use="required"/>
<xsd:anyAttribute/>
</xsd:complexType>
<xsd:complexType name="FilterType">
<xsd:sequence>
<xsd:any minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="SubscriptionPolicyType">
<xsd:sequence>
<xsd:any minOccurs="0" maxOccurs="unbounded" processContents="lax"/>
</xsd:sequence>
</xsd:complexType>
<!-- =============== Resource Property Related =================== -->
<!-- ======== Resource Properties for NotificationProducer ======== -->
<xsd:element name="TopicExpression" type="wsnt:TopicExpressionType"/>
<xsd:element name="FixedTopicSet" type="xsd:boolean" default="true"/>
<xsd:element name="TopicExpressionDialect" type="xsd:anyURI"/>
<xsd:element name="NotificationProducerRP">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="wsnt:TopicExpression"
minOccurs="0" maxOccurs="unbounded"/>
<xsd:element ref="wsnt:FixedTopicSet"
minOccurs="0" maxOccurs="1"/>
<xsd:element ref="wsnt:TopicExpressionDialect"
minOccurs="0" maxOccurs="unbounded"/>
<xsd:element ref="wstop:TopicSet"
minOccurs="0" maxOccurs="1"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<!-- ======== Resource Properties for SubscriptionManager ========= -->
<xsd:element name="ConsumerReference"
type="wsa:EndpointReferenceType"/>
<xsd:element name="Filter" type="wsnt:FilterType"/>
<xsd:element name="SubscriptionPolicy" type="wsnt:SubscriptionPolicyType"/>
<xsd:element name="CreationTime" type="xsd:dateTime"/>
<xsd:element name="SubscriptionManagerRP">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="wsnt:ConsumerReference"
minOccurs="1" maxOccurs="1"/>
<xsd:element ref="wsnt:Filter"
minOccurs="0" maxOccurs="1"/>
<xsd:element ref="wsnt:SubscriptionPolicy"
minOccurs="0" maxOccurs="1"/>
<xsd:element ref="wsnt:CreationTime"
minOccurs="0" maxOccurs="1"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<!-- ================= Notification Metadata ===================== -->
<xsd:element name="SubscriptionReference"
type="wsa:EndpointReferenceType"/>
<xsd:element name="Topic"
type="wsnt:TopicExpressionType"/>
<xsd:element name="ProducerReference"
type="wsa:EndpointReferenceType"/>
<!-- ================== Message Helper Types ===================== -->
<xsd:complexType name="NotificationMessageHolderType">
<xsd:sequence>
<xsd:element ref="wsnt:SubscriptionReference"
minOccurs="0" maxOccurs="1"/>
<xsd:element ref="wsnt:Topic"
minOccurs="0" maxOccurs="1"/>
<xsd:element ref="wsnt:ProducerReference"
minOccurs="0" maxOccurs="1"/>
<xsd:element name="Message">
<xsd:complexType>
<xsd:sequence>
<xsd:any namespace="##any" processContents="lax"
minOccurs="1" maxOccurs="1"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
<xsd:element name="NotificationMessage"
type="wsnt:NotificationMessageHolderType"/>
<!-- ========== Message Types for NotificationConsumer =========== -->
<xsd:element name="Notify">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="wsnt:NotificationMessage"
minOccurs="1" maxOccurs="unbounded"/>
<xsd:any namespace="##other" processContents="lax"
minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<!-- ========== Message Types for NotificationProducer =========== -->
<xsd:simpleType name="AbsoluteOrRelativeTimeType">
<xsd:union memberTypes="xsd:dateTime xsd:duration"/>
</xsd:simpleType>
<xsd:element name="CurrentTime" type="xsd:dateTime"/>
<xsd:element name="TerminationTime"
nillable="true" type="xsd:dateTime"/>
<xsd:element name="ProducerProperties"
type="wsnt:QueryExpressionType"/>
<xsd:element name="MessageContent"
type="wsnt:QueryExpressionType"/>
<xsd:element name="UseRaw">
<xsd:complexType/>
</xsd:element>
<xsd:element name="Subscribe">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="ConsumerReference"
type="wsa:EndpointReferenceType"
minOccurs="1" maxOccurs="1"/>
<xsd:element name="Filter"
type="wsnt:FilterType"
minOccurs="0" maxOccurs="1"/>
<xsd:element name="InitialTerminationTime"
type="wsnt:AbsoluteOrRelativeTimeType"
nillable="true"
minOccurs="0" maxOccurs="1"/>
<xsd:element name="SubscriptionPolicy"
minOccurs="0" maxOccurs="1">
<xsd:complexType>
<xsd:sequence>
<xsd:any namespace="##any" processContents="lax"
minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:any namespace="##other" processContents="lax"
minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="SubscribeResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="SubscriptionReference"
type="wsa:EndpointReferenceType"
minOccurs="1" maxOccurs="1"/>
<xsd:element ref="wsnt:CurrentTime"
minOccurs="0" maxOccurs="1"/>
<xsd:element ref="wsnt:TerminationTime"
minOccurs="0" maxOccurs="1"/>
<xsd:any namespace="##other" processContents="lax"
minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="GetCurrentMessage">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Topic"
type="wsnt:TopicExpressionType"/>
<xsd:any namespace="##other" processContents="lax"
minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="GetCurrentMessageResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:any namespace="##other" processContents="lax"
minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:complexType name="SubscribeCreationFailedFaultType">
<xsd:complexContent>
<xsd:extension base="wsrf-bf:BaseFaultType"/>
</xsd:complexContent>
</xsd:complexType>
<xsd:element name="SubscribeCreationFailedFault"
type="wsnt:SubscribeCreationFailedFaultType"/>
<xsd:complexType name="InvalidFilterFaultType">
<xsd:complexContent>
<xsd:extension base="wsrf-bf:BaseFaultType">
<xsd:sequence>
<xsd:element name="UnknownFilter" type="xsd:QName"
minOccurs="1" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:element name="InvalidFilterFault"
type="wsnt:InvalidFilterFaultType"/>
<xsd:complexType name="TopicExpressionDialectUnknownFaultType">
<xsd:complexContent>
<xsd:extension base="wsrf-bf:BaseFaultType"/>
</xsd:complexContent>
</xsd:complexType>
<xsd:element name="TopicExpressionDialectUnknownFault"
type="wsnt:TopicExpressionDialectUnknownFaultType"/>
<xsd:complexType name="InvalidTopicExpressionFaultType">
<xsd:complexContent>
<xsd:extension base="wsrf-bf:BaseFaultType"/>
</xsd:complexContent>
</xsd:complexType>
<xsd:element name="InvalidTopicExpressionFault"
type="wsnt:InvalidTopicExpressionFaultType"/>
<xsd:complexType name="TopicNotSupportedFaultType">
<xsd:complexContent>
<xsd:extension base="wsrf-bf:BaseFaultType"/>
</xsd:complexContent>
</xsd:complexType>
<xsd:element name="TopicNotSupportedFault"
type="wsnt:TopicNotSupportedFaultType"/>
<xsd:complexType name="MultipleTopicsSpecifiedFaultType">
<xsd:complexContent>
<xsd:extension base="wsrf-bf:BaseFaultType"/>
</xsd:complexContent>
</xsd:complexType>
<xsd:element name="MultipleTopicsSpecifiedFault"
type="wsnt:MultipleTopicsSpecifiedFaultType"/>
<xsd:complexType name="InvalidProducerPropertiesExpressionFaultType">
<xsd:complexContent>
<xsd:extension base="wsrf-bf:BaseFaultType"/>
</xsd:complexContent>
</xsd:complexType>
<xsd:element name="InvalidProducerPropertiesExpressionFault"
type="wsnt:InvalidProducerPropertiesExpressionFaultType"/>
<xsd:complexType name="InvalidMessageContentExpressionFaultType">
<xsd:complexContent>
<xsd:extension base="wsrf-bf:BaseFaultType"/>
</xsd:complexContent>
</xsd:complexType>
<xsd:element name="InvalidMessageContentExpressionFault"
type="wsnt:InvalidMessageContentExpressionFaultType"/>
<xsd:complexType name="UnrecognizedPolicyRequestFaultType">
<xsd:complexContent>
<xsd:extension base="wsrf-bf:BaseFaultType">
<xsd:sequence>
<xsd:element name="UnrecognizedPolicy" type="xsd:QName"
minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:element name="UnrecognizedPolicyRequestFault"
type="wsnt:UnrecognizedPolicyRequestFaultType"/>
<xsd:complexType name="UnsupportedPolicyRequestFaultType">
<xsd:complexContent>
<xsd:extension base="wsrf-bf:BaseFaultType">
<xsd:sequence>
<xsd:element name="UnsupportedPolicy" type="xsd:QName"
minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:element name="UnsupportedPolicyRequestFault"
type="wsnt:UnsupportedPolicyRequestFaultType"/>
<xsd:complexType name="NotifyMessageNotSupportedFaultType">
<xsd:complexContent>
<xsd:extension base="wsrf-bf:BaseFaultType"/>
</xsd:complexContent>
</xsd:complexType>
<xsd:element name="NotifyMessageNotSupportedFault"
type="wsnt:NotifyMessageNotSupportedFaultType"/>
<xsd:complexType name="UnacceptableInitialTerminationTimeFaultType">
<xsd:complexContent>
<xsd:extension base="wsrf-bf:BaseFaultType">
<xsd:sequence>
<xsd:element name="MinimumTime" type="xsd:dateTime"/>
<xsd:element name="MaximumTime" type="xsd:dateTime"
minOccurs="0"/>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:element name="UnacceptableInitialTerminationTimeFault"
type="wsnt:UnacceptableInitialTerminationTimeFaultType"/>
<xsd:complexType name="NoCurrentMessageOnTopicFaultType">
<xsd:complexContent>
<xsd:extension base="wsrf-bf:BaseFaultType"/>
</xsd:complexContent>
</xsd:complexType>
<xsd:element name="NoCurrentMessageOnTopicFault"
type="wsnt:NoCurrentMessageOnTopicFaultType"/>
<!-- ======== Message Types for PullPoint ======================== -->
<xsd:element name="GetMessages">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="MaximumNumber"
type="xsd:nonNegativeInteger"
minOccurs="0"/>
<xsd:any namespace="##other" processContents="lax"
minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
<xsd:anyAttribute/>
</xsd:complexType>
</xsd:element>
<xsd:element name="GetMessagesResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="wsnt:NotificationMessage"
minOccurs="0" maxOccurs="unbounded"/>
<xsd:any namespace="##other" processContents="lax"
minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
<xsd:anyAttribute/>
</xsd:complexType>
</xsd:element>
<xsd:element name="DestroyPullPoint">
<xsd:complexType>
<xsd:sequence>
<xsd:any namespace="##other" processContents="lax"
minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
<xsd:anyAttribute/>
</xsd:complexType>
</xsd:element>
<xsd:element name="DestroyPullPointResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:any namespace="##other" processContents="lax"
minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
<xsd:anyAttribute/>
</xsd:complexType>
</xsd:element>
<xsd:complexType name="UnableToGetMessagesFaultType">
<xsd:complexContent>
<xsd:extension base="wsrf-bf:BaseFaultType"/>
</xsd:complexContent>
</xsd:complexType>
<xsd:element name="UnableToGetMessagesFault"
type="wsnt:UnableToGetMessagesFaultType"/>
<xsd:complexType name="UnableToDestroyPullPointFaultType">
<xsd:complexContent>
<xsd:extension base="wsrf-bf:BaseFaultType"/>
</xsd:complexContent>
</xsd:complexType>
<xsd:element name="UnableToDestroyPullPointFault"
type="wsnt:UnableToDestroyPullPointFaultType"/>
<!-- ======== Message Types for Create PullPoint ================= -->
<xsd:element name="CreatePullPoint">
<xsd:complexType>
<xsd:sequence>
<xsd:any namespace="##other" processContents="lax"
minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
<xsd:anyAttribute/>
</xsd:complexType>
</xsd:element>
<xsd:element name="CreatePullPointResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="PullPoint"
type="wsa:EndpointReferenceType"/>
<xsd:any namespace="##other" processContents="lax"
minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
<xsd:anyAttribute/>
</xsd:complexType>
</xsd:element>
<xsd:complexType name="UnableToCreatePullPointFaultType">
<xsd:complexContent>
<xsd:extension base="wsrf-bf:BaseFaultType"/>
</xsd:complexContent>
</xsd:complexType>
<xsd:element name="UnableToCreatePullPointFault"
type="wsnt:UnableToCreatePullPointFaultType"/>
<!-- ======== Message Types for Base SubscriptionManager ========= -->
<xsd:element name="Renew">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="TerminationTime"
type="wsnt:AbsoluteOrRelativeTimeType"
nillable="true"
minOccurs="1" maxOccurs="1"/>
<xsd:any namespace="##other" processContents="lax"
minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="RenewResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="wsnt:TerminationTime"
minOccurs="1" maxOccurs="1"/>
<xsd:element ref="wsnt:CurrentTime"
minOccurs="0" maxOccurs="1"/>
<xsd:any namespace="##other" processContents="lax"
minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:complexType name="UnacceptableTerminationTimeFaultType">
<xsd:complexContent>
<xsd:extension base="wsrf-bf:BaseFaultType">
<xsd:sequence>
<xsd:element name="MinimumTime" type="xsd:dateTime"/>
<xsd:element name="MaximumTime" type="xsd:dateTime"
minOccurs="0"/>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:element name="UnacceptableTerminationTimeFault"
type="wsnt:UnacceptableTerminationTimeFaultType"/>
<xsd:element name="Unsubscribe">
<xsd:complexType>
<xsd:sequence>
<xsd:any namespace="##other" processContents="lax"
minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="UnsubscribeResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:any namespace="##other" processContents="lax"
minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:complexType name="UnableToDestroySubscriptionFaultType">
<xsd:complexContent>
<xsd:extension base="wsrf-bf:BaseFaultType"/>
</xsd:complexContent>
</xsd:complexType>
<xsd:element name="UnableToDestroySubscriptionFault"
type="wsnt:UnableToDestroySubscriptionFaultType"/>
<!-- ====== Message Types for Pausable SubscriptionManager ======= -->
<xsd:element name="PauseSubscription">
<xsd:complexType>
<xsd:sequence>
<xsd:any namespace="##other" processContents="lax"
minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="PauseSubscriptionResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:any namespace="##other" processContents="lax"
minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="ResumeSubscription">
<xsd:complexType>
<xsd:sequence>
<xsd:any namespace="##other" processContents="lax"
minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="ResumeSubscriptionResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:any namespace="##other" processContents="lax"
minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:complexType name="PauseFailedFaultType">
<xsd:complexContent>
<xsd:extension base="wsrf-bf:BaseFaultType"/>
</xsd:complexContent>
</xsd:complexType>
<xsd:element name="PauseFailedFault"
type="wsnt:PauseFailedFaultType"/>
<xsd:complexType name="ResumeFailedFaultType">
<xsd:complexContent>
<xsd:extension base="wsrf-bf:BaseFaultType"/>
</xsd:complexContent>
</xsd:complexType>
<xsd:element name="ResumeFailedFault"
type="wsnt:ResumeFailedFaultType"/>
</xsd:schema>

View File

@ -0,0 +1,447 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
OASIS takes no position regarding the validity or scope of any intellectual property or other rights that might be claimed to pertain to the implementation or use of the technology described in this document or the extent to which any license under such rights might or might not be available; neither does it represent that it has made any effort to identify any such rights. Information on OASIS's procedures with respect to rights in OASIS specifications can be found at the OASIS website. Copies of claims of rights made available for publication and any assurances of licenses to be made available, or the result of an attempt made to obtain a general license or permission for the use of such proprietary rights by implementors or users of this specification, can be obtained from the OASIS Executive Director.
OASIS invites any interested party to bring to its attention any copyrights, patents or patent applications, or other proprietary rights which may cover technology that may be required to implement this specification. Please address the information to the OASIS Executive Director.
Copyright (C) OASIS Open (2004-2006). All Rights Reserved.
This document and translations of it may be copied and furnished to others, and derivative works that comment on or otherwise explain it or assist in its implementation may be prepared, copied, published and distributed, in whole or in part, without restriction of any kind, provided that the above copyright notice and this paragraph are included on all such copies and derivative works. However, this document itself may not be modified in any way, such as by removing the copyright notice or references to OASIS, except as needed for the purpose of developing OASIS specifications, in which case the procedures for copyrights defined in the OASIS Intellectual Property Rights document must be followed, or as required to translate it into languages other than English.
The limited permissions granted above are perpetual and will not be revoked by OASIS or its successors or assigns.
This document and the information contained herein is provided on an "AS IS" basis and OASIS DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
-->
<wsdl:definitions name="WS-BaseNotification"
targetNamespace="http://docs.oasis-open.org/wsn/bw-2"
xmlns:wsntw="http://docs.oasis-open.org/wsn/bw-2"
xmlns:wsnt="http://docs.oasis-open.org/wsn/b-2"
xmlns:wsrf-rw="http://docs.oasis-open.org/wsrf/rw-2"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
<!-- ========================== Imports =========================== -->
<wsdl:import
namespace="http://docs.oasis-open.org/wsrf/rw-2"
location="http://docs.oasis-open.org/wsrf/rw-2.wsdl"/>
<!-- ===================== Types Definitions ====================== -->
<wsdl:types>
<xsd:schema>
<xsd:import
namespace="http://docs.oasis-open.org/wsn/b-2"
schemaLocation="http://docs.oasis-open.org/wsn/b-2.xsd"/>
</xsd:schema>
</wsdl:types>
<!-- ================ NotificationConsumer::Notify ================
Notify(
NotificationMessage
(SubscriptionReference, TopicExpression, ProducerReference,
Message)*
returns: n/a (one way)
-->
<wsdl:message name="Notify">
<wsdl:part name="Notify" element="wsnt:Notify"/>
</wsdl:message>
<!-- ============== NotificationProducer::Subscribe ===============
Subscribe(
(ConsumerEndpointReference, [Filter], [SubscriptionPolicy],
[InitialTerminationTime])
returns: WS-Resource qualified EPR to a Subscription
-->
<wsdl:message name="SubscribeRequest">
<wsdl:part name="SubscribeRequest"
element="wsnt:Subscribe"/>
</wsdl:message>
<wsdl:message name="SubscribeResponse">
<wsdl:part name="SubscribeResponse"
element="wsnt:SubscribeResponse"/>
</wsdl:message>
<wsdl:message name="SubscribeCreationFailedFault">
<wsdl:part name="SubscribeCreationFailedFault"
element="wsnt:SubscribeCreationFailedFault"/>
</wsdl:message>
<wsdl:message name="TopicExpressionDialectUnknownFault">
<wsdl:part name="TopicExpressionDialectUnknownFault"
element="wsnt:TopicExpressionDialectUnknownFault"/>
</wsdl:message>
<wsdl:message name="InvalidFilterFault">
<wsdl:part name="InvalidFilterFault"
element="wsnt:InvalidFilterFault"/>
</wsdl:message>
<wsdl:message name="InvalidProducerPropertiesExpressionFault">
<wsdl:part name="InvalidProducerPropertiesExpressionFault"
element="wsnt:InvalidProducerPropertiesExpressionFault"/>
</wsdl:message>
<wsdl:message name="InvalidMessageContentExpressionFault">
<wsdl:part name="InvalidMessageContentExpressionFault"
element="wsnt:InvalidMessageContentExpressionFault"/>
</wsdl:message>
<wsdl:message name="UnrecognizedPolicyRequestFault">
<wsdl:part name="UnrecognizedPolicyRequestFault"
element="wsnt:UnrecognizedPolicyRequestFault"/>
</wsdl:message>
<wsdl:message name="UnsupportedPolicyRequestFault">
<wsdl:part name="UnsupportedPolicyRequestFault"
element="wsnt:UnsupportedPolicyRequestFault"/>
</wsdl:message>
<wsdl:message name="NotifyMessageNotSupportedFault">
<wsdl:part name="NotifyMessageNotSupportedFault"
element="wsnt:NotifyMessageNotSupportedFault"/>
</wsdl:message>
<wsdl:message name="UnacceptableInitialTerminationTimeFault">
<wsdl:part name="UnacceptableInitialTerminationTimeFault"
element="wsnt:UnacceptableInitialTerminationTimeFault"/>
</wsdl:message>
<!-- ========== NotificationProducer::GetCurrentMessage ===========
GetCurrentMessage(topicExpression)
returns: a NotificationMessage (xsd:any)
-->
<wsdl:message name="GetCurrentMessageRequest">
<wsdl:part name="GetCurrentMessageRequest"
element="wsnt:GetCurrentMessage"/>
</wsdl:message>
<wsdl:message name="GetCurrentMessageResponse">
<wsdl:part name="GetCurrentMessageResponse"
element="wsnt:GetCurrentMessageResponse"/>
</wsdl:message>
<wsdl:message name="InvalidTopicExpressionFault">
<wsdl:part name="InvalidTopicExpressionFault"
element="wsnt:InvalidTopicExpressionFault"/>
</wsdl:message>
<wsdl:message name="TopicNotSupportedFault">
<wsdl:part name="TopicNotSupportedFault"
element="wsnt:TopicNotSupportedFault"/>
</wsdl:message>
<wsdl:message name="MultipleTopicsSpecifiedFault">
<wsdl:part name="MultipleTopicsSpecifiedFault"
element="wsnt:MultipleTopicsSpecifiedFault"/>
</wsdl:message>
<wsdl:message name="NoCurrentMessageOnTopicFault">
<wsdl:part name="NoCurrentMessageOnTopicFault"
element="wsnt:NoCurrentMessageOnTopicFault"/>
</wsdl:message>
<!-- ========== PullPoint::GetMessages ===========
GetMessages(MaximumNumber)
returns: NotificationMessage list
-->
<wsdl:message name="GetMessagesRequest">
<wsdl:part name="GetMessagesRequest"
element="wsnt:GetMessages"/>
</wsdl:message>
<wsdl:message name="GetMessagesResponse">
<wsdl:part name="GetMessagesResponse"
element="wsnt:GetMessagesResponse"/>
</wsdl:message>
<wsdl:message name="UnableToGetMessagesFault">
<wsdl:part name="UnableToGetMessagesFault"
element="wsnt:UnableToGetMessagesFault"/>
</wsdl:message>
<!-- ========== PullPoint::DestroyPullPoint ===========
DestroyPullPoint()
returns: void
-->
<wsdl:message name="DestroyPullPointRequest">
<wsdl:part name="DestroyPullPointRequest"
element="wsnt:DestroyPullPoint"/>
</wsdl:message>
<wsdl:message name="DestroyPullPointResponse">
<wsdl:part name="DestroyPullPointResponse"
element="wsnt:DestroyPullPointResponse"/>
</wsdl:message>
<wsdl:message name="UnableToDestroyPullPointFault">
<wsdl:part name="UnableToDestroyPullPointFault"
element="wsnt:UnableToDestroyPullPointFault"/>
</wsdl:message>
<!-- ========== PullPoint::CreatePullPoint ===========
CreatePullPoint()
returns: PullPoint (wsa:EndpointReference)
-->
<wsdl:message name="CreatePullPointRequest">
<wsdl:part name="CreatePullPointRequest"
element="wsnt:CreatePullPoint"/>
</wsdl:message>
<wsdl:message name="CreatePullPointResponse">
<wsdl:part name="CreatePullPointResponse"
element="wsnt:CreatePullPointResponse"/>
</wsdl:message>
<wsdl:message name="UnableToCreatePullPointFault">
<wsdl:part name="UnableToCreatePullPointFault"
element="wsnt:UnableToCreatePullPointFault"/>
</wsdl:message>
<!-- ================ SubscriptionManager::Renew ==================
Renew( Duration | AbsoluteTime)
returns: (New Termination Time [CurrentTime])
-->
<wsdl:message name="RenewRequest">
<wsdl:part name="RenewRequest"
element="wsnt:Renew"/>
</wsdl:message>
<wsdl:message name="RenewResponse">
<wsdl:part name="RenewResponse"
element="wsnt:RenewResponse"/>
</wsdl:message>
<wsdl:message name="UnacceptableTerminationTimeFault">
<wsdl:part name="UnacceptableTerminationTimeFault"
element="wsnt:UnacceptableTerminationTimeFault"/>
</wsdl:message>
<!-- ============== SubscriptionManager::Unsubscribe ===============
Unsubscribe()
returns: empty
-->
<wsdl:message name="UnsubscribeRequest">
<wsdl:part name="UnsubscribeRequest"
element="wsnt:Unsubscribe"/>
</wsdl:message>
<wsdl:message name="UnsubscribeResponse">
<wsdl:part name="UnsubscribeResponse"
element="wsnt:UnsubscribeResponse"/>
</wsdl:message>
<wsdl:message name="UnableToDestroySubscriptionFault">
<wsdl:part name="UnableToDestroySubscriptionFault"
element="wsnt:UnableToDestroySubscriptionFault"/>
</wsdl:message>
<!-- ========== SubscriptionManager::PauseSubscription ============
PauseSubscription()
returns: empty
-->
<wsdl:message name="PauseSubscriptionRequest">
<wsdl:part name="PauseSubscriptionRequest"
element="wsnt:PauseSubscription"/>
</wsdl:message>
<wsdl:message name="PauseSubscriptionResponse">
<wsdl:part name="PauseSubscriptionResponse"
element="wsnt:PauseSubscriptionResponse"/>
</wsdl:message>
<wsdl:message name="PauseFailedFault">
<wsdl:part name="PauseFailedFault"
element="wsnt:PauseFailedFault"/>
</wsdl:message>
<!-- ========= SubscriptionManager::ResumeSubscription ============
ResumeSubscription()
returns: empty
-->
<wsdl:message name="ResumeSubscriptionRequest">
<wsdl:part name="ResumeSubscriptionRequest"
element="wsnt:ResumeSubscription"/>
</wsdl:message>
<wsdl:message name="ResumeSubscriptionResponse">
<wsdl:part name="ResumeSubscriptionResponse"
element="wsnt:ResumeSubscriptionResponse"/>
</wsdl:message>
<wsdl:message name="ResumeFailedFault">
<wsdl:part name="ResumeFailedFault"
element="wsnt:ResumeFailedFault"/>
</wsdl:message>
<!-- =================== PortType Definitions ===================== -->
<!-- ========= NotificationConsumer PortType Definition =========== -->
<wsdl:portType name="NotificationConsumer">
<wsdl:operation name="Notify">
<wsdl:input message="wsntw:Notify"/>
</wsdl:operation>
</wsdl:portType>
<!-- ========= NotificationProducer PortType Definition =========== -->
<wsdl:portType name="NotificationProducer">
<wsdl:operation name="Subscribe">
<wsdl:input message="wsntw:SubscribeRequest"/>
<wsdl:output message="wsntw:SubscribeResponse"/>
<wsdl:fault name="ResourceUnknownFault"
message="wsrf-rw:ResourceUnknownFault"/>
<wsdl:fault name="InvalidFilterFault"
message="wsntw:InvalidFilterFault"/>
<wsdl:fault name="TopicExpressionDialectUnknownFault"
message="wsntw:TopicExpressionDialectUnknownFault"/>
<wsdl:fault name="InvalidTopicExpressionFault"
message="wsntw:InvalidTopicExpressionFault"/>
<wsdl:fault name="TopicNotSupportedFault"
message="wsntw:TopicNotSupportedFault"/>
<wsdl:fault name="InvalidProducerPropertiesExpressionFault"
message="wsntw:InvalidProducerPropertiesExpressionFault"/>
<wsdl:fault name="InvalidMessageContentExpressionFault"
message="wsntw:InvalidMessageContentExpressionFault"/>
<wsdl:fault name="UnacceptableInitialTerminationTimeFault"
message="wsntw:UnacceptableInitialTerminationTimeFault"/>
<wsdl:fault name="UnrecognizedPolicyRequestFault"
message="wsntw:UnrecognizedPolicyRequestFault"/>
<wsdl:fault name="UnsupportedPolicyRequestFault"
message="wsntw:UnsupportedPolicyRequestFault"/>
<wsdl:fault name="NotifyMessageNotSupportedFault"
message="wsntw:NotifyMessageNotSupportedFault"/>
<wsdl:fault name="SubscribeCreationFailedFault"
message="wsntw:SubscribeCreationFailedFault"/>
</wsdl:operation>
<wsdl:operation name="GetCurrentMessage">
<wsdl:input message="wsntw:GetCurrentMessageRequest"/>
<wsdl:output message="wsntw:GetCurrentMessageResponse"/>
<wsdl:fault name="ResourceUnknownFault"
message="wsrf-rw:ResourceUnknownFault"/>
<wsdl:fault name="TopicExpressionDialectUnknownFault"
message="wsntw:TopicExpressionDialectUnknownFault"/>
<wsdl:fault name="InvalidTopicExpressionFault"
message="wsntw:InvalidTopicExpressionFault"/>
<wsdl:fault name="TopicNotSupportedFault"
message="wsntw:TopicNotSupportedFault"/>
<wsdl:fault name="NoCurrentMessageOnTopicFault"
message="wsntw:NoCurrentMessageOnTopicFault"/>
<wsdl:fault name="MultipleTopicsSpecifiedFault"
message="wsntw:MultipleTopicsSpecifiedFault"/>
</wsdl:operation>
</wsdl:portType>
<!-- ========== PullPoint PortType Definition ===================== -->
<wsdl:portType name="PullPoint">
<wsdl:operation name="GetMessages">
<wsdl:input name="GetMessagesRequest"
message="wsntw:GetMessagesRequest"/>
<wsdl:output name="GetMessagesResponse"
message="wsntw:GetMessagesResponse"/>
<wsdl:fault name="ResourceUnknownFault"
message="wsrf-rw:ResourceUnknownFault"/>
<wsdl:fault name="UnableToGetMessagesFault"
message="wsntw:UnableToGetMessagesFault"/>
</wsdl:operation>
<wsdl:operation name="DestroyPullPoint">
<wsdl:input name="DestroyPullPointRequest"
message="wsntw:DestroyPullPointRequest"/>
<wsdl:output name="DestroyPullPointResponse"
message="wsntw:DestroyPullPointResponse"/>
<wsdl:fault name="ResourceUnknownFault"
message="wsrf-rw:ResourceUnknownFault"/>
<wsdl:fault name="UnableToDestroyPullPointFault"
message="wsntw:UnableToDestroyPullPointFault"/>
</wsdl:operation>
<wsdl:operation name="Notify">
<wsdl:input message="wsntw:Notify"/>
</wsdl:operation>
</wsdl:portType>
<!-- ========== CreatePullPoint PortType Definition =============== -->
<wsdl:portType name="CreatePullPoint">
<wsdl:operation name="CreatePullPoint">
<wsdl:input name="CreatePullPointRequest"
message="wsntw:CreatePullPointRequest"/>
<wsdl:output name="CreatePullPointResponse"
message="wsntw:CreatePullPointResponse"/>
<wsdl:fault name="UnableToCreatePullPointFault"
message="wsntw:UnableToCreatePullPointFault"/>
</wsdl:operation>
</wsdl:portType>
<!-- ========== SubscriptionManager PortType Definition =========== -->
<wsdl:portType name="SubscriptionManager">
<wsdl:operation name="Renew">
<wsdl:input name="RenewRequest"
message="wsntw:RenewRequest"/>
<wsdl:output name="RenewResponse"
message="wsntw:RenewResponse"/>
<wsdl:fault name="ResourceUnknownFault"
message="wsrf-rw:ResourceUnknownFault"/>
<wsdl:fault name="UnacceptableTerminationTimeFault"
message=
"wsntw:UnacceptableTerminationTimeFault"/>
</wsdl:operation>
<wsdl:operation name="Unsubscribe">
<wsdl:input name="UnsubscribeRequest"
message="wsntw:UnsubscribeRequest"/>
<wsdl:output name="UnsubscribeResponse"
message="wsntw:UnsubscribeResponse"/>
<wsdl:fault name="ResourceUnknownFault"
message="wsrf-rw:ResourceUnknownFault"/>
<wsdl:fault name="UnableToDestroySubscriptionFault"
message=
"wsntw:UnableToDestroySubscriptionFault"/>
</wsdl:operation>
</wsdl:portType>
<!-- ====== PausableSubscriptionManager PortType Definition ======= -->
<wsdl:portType name="PausableSubscriptionManager">
<!-- ============== Extends: SubscriptionManager ============ -->
<wsdl:operation name="Renew">
<wsdl:input name="RenewRequest"
message="wsntw:RenewRequest"/>
<wsdl:output name="RenewResponse"
message="wsntw:RenewResponse"/>
<wsdl:fault name="ResourceUnknownFault"
message="wsrf-rw:ResourceUnknownFault"/>
<wsdl:fault name="UnacceptableTerminationTimeFault"
message=
"wsntw:UnacceptableTerminationTimeFault"/>
</wsdl:operation>
<wsdl:operation name="Unsubscribe">
<wsdl:input name="UnsubscribeRequest"
message="wsntw:UnsubscribeRequest"/>
<wsdl:output name="UnsubscribeResponse"
message="wsntw:UnsubscribeResponse"/>
<wsdl:fault name="ResourceUnknownFault"
message="wsrf-rw:ResourceUnknownFault"/>
<wsdl:fault name="UnableToDestroySubscriptionFault"
message=
"wsntw:UnableToDestroySubscriptionFault"/>
</wsdl:operation>
<!-- === PausableSubscriptionManager specific operations === -->
<wsdl:operation name="PauseSubscription">
<wsdl:input message="wsntw:PauseSubscriptionRequest"/>
<wsdl:output message="wsntw:PauseSubscriptionResponse"/>
<wsdl:fault name="ResourceUnknownFault"
message="wsrf-rw:ResourceUnknownFault"/>
<wsdl:fault name="PauseFailedFault"
message="wsntw:PauseFailedFault"/>
</wsdl:operation>
<wsdl:operation name="ResumeSubscription">
<wsdl:input message="wsntw:ResumeSubscriptionRequest"/>
<wsdl:output message="wsntw:ResumeSubscriptionResponse"/>
<wsdl:fault name="ResourceUnknownFault"
message="wsrf-rw:ResourceUnknownFault"/>
<wsdl:fault name="ResumeFailedFault"
message="wsntw:ResumeFailedFault"/>
</wsdl:operation>
</wsdl:portType>
</wsdl:definitions>

View File

@ -0,0 +1,184 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
OASIS takes no position regarding the validity or scope of any intellectual property or other rights that might be claimed to pertain to the implementation or use of the technology described in this document or the extent to which any license under such rights might or might not be available; neither does it represent that it has made any effort to identify any such rights. Information on OASIS's procedures with respect to rights in OASIS specifications can be found at the OASIS website. Copies of claims of rights made available for publication and any assurances of licenses to be made available, or the result of an attempt made to obtain a general license or permission for the use of such proprietary rights by implementors or users of this specification, can be obtained from the OASIS Executive Director.
OASIS invites any interested party to bring to its attention any copyrights, patents or patent applications, or other proprietary rights which may cover technology that may be required to implement this specification. Please address the information to the OASIS Executive Director.
Copyright (C) OASIS Open (2004-2006). All Rights Reserved.
This document and translations of it may be copied and furnished to others, and derivative works that comment on or otherwise explain it or assist in its implementation may be prepared, copied, published and distributed, in whole or in part, without restriction of any kind, provided that the above copyright notice and this paragraph are included on all such copies and derivative works. However, this document itself may not be modified in any way, such as by removing the copyright notice or references to OASIS, except as needed for the purpose of developing OASIS specifications, in which case the procedures for copyrights defined in the OASIS Intellectual Property Rights document must be followed, or as required to translate it into languages other than English.
The limited permissions granted above are perpetual and will not be revoked by OASIS or its successors or assigns.
This document and the information contained herein is provided on an "AS IS" basis and OASIS DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
-->
<xsd:schema
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:wstop="http://docs.oasis-open.org/wsn/t-1"
targetNamespace="http://docs.oasis-open.org/wsn/t-1"
elementFormDefault="qualified" attributeFormDefault="unqualified">
<!-- =============== utility type definitions ==================== -->
<xsd:complexType name="Documentation" mixed="true">
<xsd:sequence>
<xsd:any processContents="lax" minOccurs="0"
maxOccurs="unbounded" namespace="##any"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="ExtensibleDocumented" abstract="true"
mixed="false">
<xsd:sequence>
<xsd:element name="documentation" type="wstop:Documentation"
minOccurs="0"/>
</xsd:sequence>
<xsd:anyAttribute namespace="##other" processContents="lax"/>
</xsd:complexType>
<xsd:complexType name="QueryExpressionType" mixed="true">
<xsd:sequence>
<xsd:any minOccurs="0" maxOccurs="1" processContents="lax"/>
</xsd:sequence>
<xsd:attribute name="Dialect" type="xsd:anyURI" use="required"/>
</xsd:complexType>
<!-- ================== Topic-Namespace Related ================ -->
<xsd:complexType name="TopicNamespaceType">
<xsd:complexContent>
<xsd:extension base="wstop:ExtensibleDocumented">
<xsd:sequence>
<xsd:element name="Topic"
minOccurs="0" maxOccurs="unbounded">
<xsd:complexType>
<xsd:complexContent>
<xsd:extension base="wstop:TopicType">
<xsd:attribute name="parent" type="wstop:ConcreteTopicExpression"/>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
</xsd:element>
<xsd:any namespace="##other"
minOccurs="0" maxOccurs="unbounded"
processContents="lax"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:NCName"/>
<xsd:attribute name="targetNamespace" type="xsd:anyURI"
use="required"/>
<xsd:attribute name="final" type="xsd:boolean"
default="false"/>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:element name="TopicNamespace" type="wstop:TopicNamespaceType">
<xsd:unique name="rootTopicUniqueness">
<xsd:selector xpath="wstop:Topic"/>
<xsd:field xpath="@name"/>
</xsd:unique>
</xsd:element>
<xsd:attribute name="topicNamespaceLocation" type="xsd:anyURI"/>
<!-- ===================== Topic Related ========================= -->
<xsd:complexType name="TopicType">
<xsd:complexContent>
<xsd:extension base="wstop:ExtensibleDocumented">
<xsd:sequence>
<xsd:element name="MessagePattern"
type="wstop:QueryExpressionType"
minOccurs="0" maxOccurs="1"/>
<xsd:element name="Topic" type="wstop:TopicType"
minOccurs="0" maxOccurs="unbounded">
<xsd:unique name="childTopicUniqueness">
<xsd:selector xpath="wstop:topic"/>
<xsd:field xpath="@name"/>
</xsd:unique>
</xsd:element>
<xsd:any namespace="##other" minOccurs="0"
maxOccurs="unbounded"/>
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:NCName"/>
<xsd:attribute name="messageTypes">
<xsd:simpleType>
<xsd:list itemType="xsd:QName"/>
</xsd:simpleType>
</xsd:attribute>
<xsd:attribute name="final" type="xsd:boolean"
default="false"/>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<!-- ================ Topic Set Related =================== -->
<xsd:complexType name="TopicSetType">
<xsd:complexContent>
<xsd:extension base="wstop:ExtensibleDocumented">
<xsd:sequence>
<xsd:any namespace="##other"
minOccurs="0" maxOccurs="unbounded"
processContents="lax"/>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:element name="TopicSet" type="wstop:TopicSetType"/>
<xsd:attribute name="topic" type="xsd:boolean" default="false"/>
<!-- ================ Topic Expression Related =================== -->
<xsd:simpleType name="FullTopicExpression">
<xsd:restriction base="xsd:token">
<xsd:annotation>
<xsd:documentation>
TopicPathExpression ::= TopicPath ( '|' TopicPath )*
TopicPath ::= RootTopic ChildTopicExpression*
RootTopic ::= NamespacePrefix? ('//')? (NCName | '*')
NamespacePrefix ::= NCName ':'
ChildTopicExpression ::= '/' '/'? (QName | NCName | '*'| '.')
</xsd:documentation>
</xsd:annotation>
<xsd:pattern value=
"([\i-[:]][\c-[:]]*:)?(//)?([\i-[:]][\c-[:]]*|\*)((/|//)(([\i-[:]][\c-[:]]*:)?[\i-[:]][\c-[:]]*|\*|[.]))*(\|([\i-[:]][\c-[:]]*:)?(//)?([\i-[:]][\c-[:]]*|\*)((/|//)(([\i-[:]][\c-[:]]*:)?[\i-[:]][\c-[:]]*|\*|[.]))*)*">
</xsd:pattern>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="ConcreteTopicExpression">
<xsd:restriction base="xsd:token">
<xsd:annotation>
<xsd:documentation>
The pattern allows strings matching the following EBNF:
ConcreteTopicPath ::= RootTopic ChildTopic*
RootTopic ::= QName
ChildTopic ::= '/' (QName | NCName)
</xsd:documentation>
</xsd:annotation>
<xsd:pattern value=
"(([\i-[:]][\c-[:]]*:)?[\i-[:]][\c-[:]]*)(/([\i-[:]][\c-[:]]*:)?[\i-[:]][\c-[:]]*)*">
</xsd:pattern>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="SimpleTopicExpression">
<xsd:restriction base="xsd:QName">
<xsd:annotation>
<xsd:documentation>
The pattern allows strings matching the following EBNF:
RootTopic ::= QName
</xsd:documentation>
</xsd:annotation>
</xsd:restriction>
</xsd:simpleType>
</xsd:schema>

View File

@ -0,0 +1,84 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
OASIS takes no position regarding the validity or scope of any intellectual property or other rights that might be claimed to pertain to the implementation or use of the technology described in this document or the extent to which any license under such rights might or might not be available; neither does it represent that it has made any effort to identify any such rights. Information on OASIS's procedures with respect to rights in OASIS specifications can be found at the OASIS website. Copies of claims of rights made available for publication and any assurances of licenses to be made available, or the result of an attempt made to obtain a general license or permission for the use of such proprietary rights by implementers or users of this specification, can be obtained from the OASIS Executive Director.
OASIS invites any interested party to bring to its attention any copyrights, patents or patent applications, or other proprietary rights which may cover technology that may be required to implement this specification. Please address the information to the OASIS Executive Director.
Copyright (C) OASIS Open (2005). All Rights Reserved.
This document and translations of it may be copied and furnished to others, and derivative works that comment on or otherwise explain it or assist in its implementation may be prepared, copied, published and distributed, in whole or in part, without restriction of any kind, provided that the above copyright notice and this paragraph are included on all such copies and derivative works. However, this document itself may not be modified in any way, such as by removing the copyright notice or references to OASIS, except as needed for the purpose of developing OASIS specifications, in which case the procedures for copyrights defined in the OASIS Intellectual Property Rights document must be followed, or as required to translate it into languages other than English.
The limited permissions granted above are perpetual and will not be revoked by OASIS or its successors or assigns.
This document and the information contained herein is provided on an "AS IS" basis and OASIS DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
-->
<xsd:schema
xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:wsa="http://www.w3.org/2005/08/addressing"
xmlns:wsrf-bf=
"http://docs.oasis-open.org/wsrf/bf-2"
elementFormDefault="qualified" attributeFormDefault="unqualified"
targetNamespace=
"http://docs.oasis-open.org/wsrf/bf-2">
<xsd:import
namespace="http://www.w3.org/2005/08/addressing"
schemaLocation=
"http://www.w3.org/2005/08/addressing/ws-addr.xsd"/>
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"
schemaLocation="http://www.w3.org/2001/xml.xsd">
<xsd:annotation>
<xsd:documentation>
Get access to the xml: attribute groups for xml:lang as declared on 'schema'
and 'documentation' below
</xsd:documentation>
</xsd:annotation>
</xsd:import>
<!-- ====================== BaseFault Types ======================= -->
<xsd:element name="BaseFault" type="wsrf-bf:BaseFaultType"/>
<xsd:complexType name="BaseFaultType">
<xsd:sequence>
<xsd:any namespace="##other" processContents="lax"
minOccurs="0" maxOccurs="unbounded"/>
<xsd:element name="Timestamp" type="xsd:dateTime"
minOccurs="1" maxOccurs="1"/>
<xsd:element name="Originator" type="wsa:EndpointReferenceType"
minOccurs="0" maxOccurs="1"/>
<xsd:element name="ErrorCode"
minOccurs="0" maxOccurs="1">
<xsd:complexType>
<xsd:complexContent mixed="true">
<xsd:extension base="xsd:anyType">
<xsd:attribute name="dialect" type="xsd:anyURI"
use="required"/>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
</xsd:element>
<xsd:element name="Description"
minOccurs="0" maxOccurs="unbounded">
<xsd:complexType>
<xsd:simpleContent>
<xsd:extension base="xsd:string">
<xsd:attribute ref="xml:lang" use="optional"/>
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
</xsd:element>
<xsd:element name="FaultCause" minOccurs="0" maxOccurs="1">
<xsd:complexType>
<xsd:sequence>
<xsd:any namespace="##other" processContents="lax"
minOccurs="1" maxOccurs="1"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
<xsd:anyAttribute namespace="##other" processContents="lax"/>
</xsd:complexType>
</xsd:schema>

View File

@ -0,0 +1,49 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
OASIS takes no position regarding the validity or scope of any intellectual property or other rights that might be claimed to pertain to the implementation or use of the technology described in this document or the extent to which any license under such rights might or might not be available; neither does it represent that it has made any effort to identify any such rights. Information on OASIS's procedures with respect to rights in OASIS specifications can be found at the OASIS website. Copies of claims of rights made available for publication and any assurances of licenses to be made available, or the result of an attempt made to obtain a general license or permission for the use of such proprietary rights by implementors or users of this specification, can be obtained from the OASIS Executive Director.
OASIS invites any interested party to bring to its attention any copyrights, patents or patent applications, or other proprietary rights which may cover technology that may be required to implement this specification. Please address the information to the OASIS Executive Director.
Copyright (C) OASIS Open (2005). All Rights Reserved.
This document and translations of it may be copied and furnished to others, and derivative works that comment on or otherwise explain it or assist in its implementation may be prepared, copied, published and distributed, in whole or in part, without restriction of any kind, provided that the above copyright notice and this paragraph are included on all such copies and derivative works. However, this document itself may not be modified in any way, such as by removing the copyright notice or references to OASIS, except as needed for the purpose of developing OASIS specifications, in which case the procedures for copyrights defined in the OASIS Intellectual Property Rights document must be followed, or as required to translate it into languages other than English.
The limited permissions granted above are perpetual and will not be revoked by OASIS or its successors or assigns.
This document and the information contained herein is provided on an "AS IS" basis and OASIS DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
-->
<xsd:schema
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:wsrf-r="http://docs.oasis-open.org/wsrf/r-2"
xmlns:wsrf-bf="http://docs.oasis-open.org/wsrf/bf-2"
elementFormDefault="qualified" attributeFormDefault="unqualified"
targetNamespace="http://docs.oasis-open.org/wsrf/r-2"
>
<xsd:import
namespace=
"http://docs.oasis-open.org/wsrf/bf-2"
schemaLocation="http://docs.oasis-open.org/wsrf/bf-2.xsd"
/>
<!-- ====================== WS-Resource fault types ============= -->
<xsd:complexType name="ResourceUnknownFaultType">
<xsd:complexContent>
<xsd:extension base="wsrf-bf:BaseFaultType"/>
</xsd:complexContent>
</xsd:complexType>
<xsd:element name="ResourceUnknownFault"
type="wsrf-r:ResourceUnknownFaultType"/>
<xsd:complexType name="ResourceUnavailableFaultType">
<xsd:complexContent>
<xsd:extension base="wsrf-bf:BaseFaultType"/>
</xsd:complexContent>
</xsd:complexType>
<xsd:element name="ResourceUnavailableFault"
type="wsrf-r:ResourceUnavailableFaultType"/>
</xsd:schema>

View File

@ -0,0 +1,53 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
OASIS takes no position regarding the validity or scope of any intellectual property or other rights that might be claimed to pertain to the implementation or use of the technology described in this document or the extent to which any license under such rights might or might not be available; neither does it represent that it has made any effort to identify any such rights. Information on OASIS's procedures with respect to rights in OASIS specifications can be found at the OASIS website. Copies of claims of rights made available for publication and any assurances of licenses to be made available, or the result of an attempt made to obtain a general license or permission for the use of such proprietary rights by implementors or users of this specification, can be obtained from the OASIS Executive Director.
OASIS invites any interested party to bring to its attention any copyrights, patents or patent applications, or other proprietary rights which may cover technology that may be required to implement this specification. Please address the information to the OASIS Executive Director.
Copyright (C) OASIS Open (2005). All Rights Reserved.
This document and translations of it may be copied and furnished to others, and derivative works that comment on or otherwise explain it or assist in its implementation may be prepared, copied, published and distributed, in whole or in part, without restriction of any kind, provided that the above copyright notice and this paragraph are included on all such copies and derivative works. However, this document itself may not be modified in any way, such as by removing the copyright notice or references to OASIS, except as needed for the purpose of developing OASIS specifications, in which case the procedures for copyrights defined in the OASIS Intellectual Property Rights document must be followed, or as required to translate it into languages other than English.
The limited permissions granted above are perpetual and will not be revoked by OASIS or its successors or assigns.
This document and the information contained herein is provided on an "AS IS" basis and OASIS DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
-->
<wsdl:definitions name="WS-Resource"
xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:wsrf-r="http://docs.oasis-open.org/wsrf/r-2"
targetNamespace="http://docs.oasis-open.org/wsrf/rw-2"
>
<!-- ===================== Types Definitions ====================== -->
<wsdl:types>
<xsd:schema
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://docs.oasis-open.org/wsrf/rw-2"
elementFormDefault="qualified"
attributeFormDefault="unqualified">
<xsd:import
namespace="http://docs.oasis-open.org/wsrf/r-2"
schemaLocation="http://docs.oasis-open.org/wsrf/r-2.xsd"
/>
</xsd:schema>
</wsdl:types>
<!-- ================= WS-Resource faults ========================= -->
<wsdl:message name="ResourceUnknownFault">
<part name="ResourceUnknownFault"
element="wsrf-r:ResourceUnknownFault"/>
</wsdl:message>
<wsdl:message name="ResourceUnavailableFault">
<part name="ResourceUnavailableFault"
element="wsrf-r:ResourceUnavailableFault"/>
</wsdl:message>
</wsdl:definitions>

View File

@ -0,0 +1,126 @@
<?xml version='1.0' encoding='UTF-8' ?>
<!-- Schema for the SOAP/1.1 envelope
Portions © 2001 DevelopMentor.
© 2001 W3C (Massachusetts Institute of Technology, Institut National de Recherche en Informatique et en Automatique, Keio University). All Rights Reserved.
This document is governed by the W3C Software License [1] as described in the FAQ [2].
[1] http://www.w3.org/Consortium/Legal/copyright-software-19980720
[2] http://www.w3.org/Consortium/Legal/IPR-FAQ-20000620.html#DTD
By obtaining, using and/or copying this work, you (the licensee) agree that you have read, understood, and will comply with the following terms and conditions:
Permission to use, copy, modify, and distribute this software and its documentation, with or without modification, for any purpose and without fee or royalty is hereby granted, provided that you include the following on ALL copies of the software and documentation or portions thereof, including modifications, that you make:
1. The full text of this NOTICE in a location viewable to users of the redistributed or derivative work.
2. Any pre-existing intellectual property disclaimers, notices, or terms and conditions. If none exist, a short notice of the following form (hypertext is preferred, text is permitted) should be used within the body of any redistributed or derivative code: "Copyright © 2001 World Wide Web Consortium, (Massachusetts Institute of Technology, Institut National de Recherche en Informatique et en Automatique, Keio University). All Rights Reserved. http://www.w3.org/Consortium/Legal/"
3. Notice of any changes or modifications to the W3C files, including the date changes were made. (We recommend you provide URIs to the location from which the code is derived.)
Original W3C files; http://www.w3.org/2001/06/soap-envelope
Changes made:
- reverted namespace to http://schemas.xmlsoap.org/soap/envelope/
- reverted mustUnderstand to only allow 0 and 1 as lexical values
- made encodingStyle a global attribute 20020825
- removed default value from mustUnderstand attribute declaration
THIS SOFTWARE AND DOCUMENTATION IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE OR DOCUMENTATION WILL NOT INFRINGE ANY THIRD PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.
COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR DOCUMENTATION.
The name and trademarks of copyright holders may NOT be used in advertising or publicity pertaining to the software without specific, written prior permission. Title to copyright in this software and any associated documentation will at all times remain with copyright holders.
-->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:tns="http://schemas.xmlsoap.org/soap/envelope/"
targetNamespace="http://schemas.xmlsoap.org/soap/envelope/" >
<!-- Envelope, header and body -->
<xs:element name="Envelope" type="tns:Envelope" />
<xs:complexType name="Envelope" >
<xs:sequence>
<xs:element ref="tns:Header" minOccurs="0" />
<xs:element ref="tns:Body" minOccurs="1" />
<xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded" processContents="lax" />
</xs:sequence>
<xs:anyAttribute namespace="##other" processContents="lax" />
</xs:complexType>
<xs:element name="Header" type="tns:Header" />
<xs:complexType name="Header" >
<xs:sequence>
<xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded" processContents="lax" />
</xs:sequence>
<xs:anyAttribute namespace="##other" processContents="lax" />
</xs:complexType>
<xs:element name="Body" type="tns:Body" />
<xs:complexType name="Body" >
<xs:sequence>
<xs:any namespace="##any" minOccurs="0" maxOccurs="unbounded" processContents="lax" />
</xs:sequence>
<xs:anyAttribute namespace="##any" processContents="lax" >
<xs:annotation>
<xs:documentation>
Prose in the spec does not specify that attributes are allowed on the Body element
</xs:documentation>
</xs:annotation>
</xs:anyAttribute>
</xs:complexType>
<!-- Global Attributes. The following attributes are intended to be usable via qualified attribute names on any complex type referencing them. -->
<xs:attribute name="mustUnderstand" >
<xs:simpleType>
<xs:restriction base='xs:boolean'>
<xs:pattern value='0|1' />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="actor" type="xs:anyURI" />
<xs:simpleType name="encodingStyle" >
<xs:annotation>
<xs:documentation>
'encodingStyle' indicates any canonicalization conventions followed in the contents of the containing element. For example, the value 'http://schemas.xmlsoap.org/soap/encoding/' indicates the pattern described in SOAP specification
</xs:documentation>
</xs:annotation>
<xs:list itemType="xs:anyURI" />
</xs:simpleType>
<xs:attribute name="encodingStyle" type="tns:encodingStyle" />
<xs:attributeGroup name="encodingStyle" >
<xs:attribute ref="tns:encodingStyle" />
</xs:attributeGroup>
<xs:element name="Fault" type="tns:Fault" />
<xs:complexType name="Fault" final="extension" >
<xs:annotation>
<xs:documentation>
Fault reporting structure
</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element name="faultcode" type="xs:QName" />
<xs:element name="faultstring" type="xs:string" />
<xs:element name="faultactor" type="xs:anyURI" minOccurs="0" />
<xs:element name="detail" type="tns:detail" minOccurs="0" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="detail">
<xs:sequence>
<xs:any namespace="##any" minOccurs="0" maxOccurs="unbounded" processContents="lax" />
</xs:sequence>
<xs:anyAttribute namespace="##any" processContents="lax" />
</xs:complexType>
</xs:schema>

View File

@ -0,0 +1,149 @@
<?xml version="1.0"?>
<!--
Copyright © 2002-2004 BEA Systems Inc., International Business Machines Corporation,
Microsoft Corporation, Inc, SAP AG, and Sun Microsystems, Inc.. All rights reserved.
Permission to copy, display, perform, modify and distribute the WS-Addressing Specification,
and to authorize others to do the foregoing, in any medium without fee or royalty is hereby
granted for the purpose of developing and evaluating the WS-Addressing Specification.
BEA, IBM, Microsoft, SAP AG, and Sun Microsystems (collectively, the "Authors") each agree
to grant a license to third parties, under royalty-free and otherwise reasonable,
non-discriminatory terms and conditions, to their respective essential patent claims that
they deem necessary to implement the WS-Addressing Specification.
DISCLAIMERS:
THE WS-Addressing Specification IS PROVIDED "AS IS", AND THE AUTHORS MAKE NO REPRESENTATIONS
OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, OR TITLE; THAT THE
CONTENTS OF THE WS-Addressing Specification IS SUITABLE FOR ANY PURPOSE; NOR THAT THE
IMPLEMENTATION OF SUCH CONTENTS WILL NOT INFRINGE ANY THIRD PARTY PATENTS, COPYRIGHTS,
TRADEMARKS OR OTHER RIGHTS.
THE AUTHORS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL
DAMAGES ARISING OUT OF ANY USE OF THE WS-Addressing Specification OR THE PERFORMANCE OR
IMPLEMENTATION OF THE CONTENTS THEREOF.
You may remove these disclaimers from your modified versions of the WS-Addressing
Specification provided that you effectively disclaim all warranties and liabilities on behalf
of all copyright holders in the copies of any such modified versions you distribute.
The name and trademarks of the Authors may NOT be used in any manner, including advertising
or publicity pertaining to the WS-Addressing Specification or its contents without specific,
written prior permission. Title to copyright in the WS-Addressing Specification will at all
times remain with the Authors.
No other rights are granted by implication, estoppel or otherwise.
-->
<xs:schema targetNamespace="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" elementFormDefault="qualified" blockDefault="#all">
<!-- //////////////////// WS-Addressing //////////////////// -->
<!-- Endpoint reference -->
<xs:element name="EndpointReference" type="wsa:EndpointReferenceType"/>
<xs:complexType name="EndpointReferenceType">
<xs:sequence>
<xs:element name="Address" type="wsa:AttributedURI"/>
<xs:element name="ReferenceProperties" type="wsa:ReferencePropertiesType" minOccurs="0"/>
<xs:element name="ReferenceParameters" type="wsa:ReferenceParametersType" minOccurs="0"/>
<xs:element name="PortType" type="wsa:AttributedQName" minOccurs="0"/>
<xs:element name="ServiceName" type="wsa:ServiceNameType" minOccurs="0"/>
<xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded">
<xs:annotation>
<xs:documentation>
If "Policy" elements from namespace "http://schemas.xmlsoap.org/ws/2002/12/policy#policy" are used, they must appear first (before any extensibility elements).
</xs:documentation>
</xs:annotation>
</xs:any>
</xs:sequence>
<xs:anyAttribute namespace="##other" processContents="lax"/>
</xs:complexType>
<xs:complexType name="ReferencePropertiesType">
<xs:sequence>
<xs:any processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="ReferenceParametersType">
<xs:sequence>
<xs:any processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="ServiceNameType">
<xs:simpleContent>
<xs:extension base="xs:QName">
<xs:attribute name="PortName" type="xs:NCName"/>
<xs:anyAttribute namespace="##other" processContents="lax"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<!-- Message information header blocks -->
<xs:element name="MessageID" type="wsa:AttributedURI"/>
<xs:element name="RelatesTo" type="wsa:Relationship"/>
<xs:element name="To" type="wsa:AttributedURI"/>
<xs:element name="Action" type="wsa:AttributedURI"/>
<xs:element name="From" type="wsa:EndpointReferenceType"/>
<xs:element name="ReplyTo" type="wsa:EndpointReferenceType"/>
<xs:element name="FaultTo" type="wsa:EndpointReferenceType"/>
<xs:complexType name="Relationship">
<xs:simpleContent>
<xs:extension base="xs:anyURI">
<xs:attribute name="RelationshipType" type="xs:QName" use="optional"/>
<xs:anyAttribute namespace="##other" processContents="lax"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:simpleType name="RelationshipTypeValues">
<xs:restriction base="xs:QName">
<xs:enumeration value="wsa:Reply"/>
</xs:restriction>
</xs:simpleType>
<!--
June 19, 2007: The ReplyAfter element is deprecated. The name of this element does not match the
name (RetryAfter) used in the specification (http://www.w3.org/Submission/2004/SUBM-ws-addressing-20040810/).
-->
<xs:element name="ReplyAfter" type="wsa:ReplyAfterType"/>
<xs:complexType name="ReplyAfterType">
<xs:simpleContent>
<xs:extension base="xs:nonNegativeInteger">
<xs:anyAttribute namespace="##other"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<!--
June 19, 2007: The RetryAfter element has been added to be consistent with the specification
(http://www.w3.org/Submission/2004/SUBM-ws-addressing-20040810/).
-->
<xs:element name="RetryAfter" type="wsa:RetryAfterType"/>
<xs:complexType name="RetryAfterType">
<xs:simpleContent>
<xs:extension base="xs:nonNegativeInteger">
<xs:anyAttribute namespace="##other"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:simpleType name="FaultSubcodeValues">
<xs:restriction base="xs:QName">
<xs:enumeration value="wsa:InvalidMessageInformationHeader"/>
<xs:enumeration value="wsa:MessageInformationHeaderRequired"/>
<xs:enumeration value="wsa:DestinationUnreachable"/>
<xs:enumeration value="wsa:ActionNotSupported"/>
<xs:enumeration value="wsa:EndpointUnavailable"/>
</xs:restriction>
</xs:simpleType>
<xs:attribute name="Action" type="xs:anyURI"/>
<!-- Common declarations and definitions -->
<xs:complexType name="AttributedQName">
<xs:simpleContent>
<xs:extension base="xs:QName">
<xs:anyAttribute namespace="##other" processContents="lax"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType name="AttributedURI">
<xs:simpleContent>
<xs:extension base="xs:anyURI">
<xs:anyAttribute namespace="##other" processContents="lax"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:schema>

View File

@ -0,0 +1,272 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
Copyright Notice
(c) 2004-2005 Microsoft Corporation, Inc. All rights reserved.
Permission to copy, display, perform, modify and distribute the
WS-Discovery Specification (the "Specification", which includes
WSDL and schema documents), and to authorize others to do the
foregoing, in any medium without fee or royalty is hereby granted
for the purpose of developing and evaluating the Specification.
BEA Systems, Canon, Intel, Microsoft, and webMethods, Inc.
(collectively, the "Co-Developers") each agree to grant a license
to third parties, under royalty-free and other reasonable,
non-discriminatory terms and conditions, to their respective
essential Licensed Claims, which reasonable, non-discriminatory
terms and conditions may include, for example, but are not limited
to, an affirmation of the obligation to grant reciprocal licenses
under any of the licensee's patents that are necessary to implement
the Specification.
DISCLAIMERS:
THE SPECIFICATION IS PROVIDED "AS IS," AND THE CO-DEVELOPERS MAKE
NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING,
BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
PARTICULAR PURPOSE, NON-INFRINGEMENT, OR TITLE; THAT THE CONTENTS
OF THE SPECIFICATION ARE SUITABLE FOR ANY PURPOSE; NOR THAT THE
IMPLEMENTATION OF SUCH CONTENTS WILL NOT INFRINGE ANY THIRD PARTY
PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.
THE CO-DEVELOPERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT,
SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF ANY
USE OF THE SPECIFICATION OR THE PERFORMANCE OR IMPLEMENTATION OF
THE CONTENTS THEREOF.
You may remove these disclaimers from your modified versions of the
Specification provided that you effectively disclaim all warranties
and liabilities on behalf of all Co-developers and any copyright
holders in the copies of any such modified versions you distribute.
The name and trademarks of the Co-developers may NOT be used in any
manner, including advertising or publicity pertaining to the
Specification or its contents without specific, written prior
permission. Title to copyright in the Specification will at all
times remain with Microsoft.
No other rights are granted by implication, estoppel or otherwise.
-->
<xs:schema
targetNamespace="http://schemas.xmlsoap.org/ws/2005/04/discovery"
xmlns:tns="http://schemas.xmlsoap.org/ws/2005/04/discovery"
xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified"
blockDefault="#all">
<xs:import
namespace="http://schemas.xmlsoap.org/ws/2004/08/addressing"
schemaLocation="http://schemas.xmlsoap.org/ws/2004/08/addressing"/>
<!-- //////////////////// Discovery Messages //////////////////// -->
<xs:element name="Hello" type="tns:HelloType"/>
<xs:complexType name="HelloType">
<xs:sequence>
<xs:element ref="wsa:EndpointReference"/>
<xs:element ref="tns:Types" minOccurs="0"/>
<xs:element ref="tns:Scopes" minOccurs="0"/>
<xs:element ref="tns:XAddrs" minOccurs="0"/>
<xs:element ref="tns:MetadataVersion"/>
<xs:any namespace="##other"
processContents="lax"
minOccurs="0"
maxOccurs="unbounded"/>
</xs:sequence>
<xs:anyAttribute namespace="##other" processContents="lax"/>
</xs:complexType>
<xs:simpleType name="RelationshipType">
<xs:restriction base="xs:QName">
<xs:enumeration value="tns:Suppression"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="OpenRelationshipType">
<xs:union memberTypes="tns:RelationshipType xs:QName"/>
</xs:simpleType>
<xs:element name="Bye" type="tns:ByeType"/>
<xs:complexType name="ByeType">
<xs:sequence>
<xs:element ref="wsa:EndpointReference"/>
<xs:element ref="tns:Types" minOccurs="0"/>
<xs:element ref="tns:Scopes" minOccurs="0"/>
<xs:element ref="tns:XAddrs" minOccurs="0"/>
<xs:element ref="tns:MetadataVersion" minOccurs="0"/>
<xs:any namespace="##other"
processContents="lax"
minOccurs="0"
maxOccurs="unbounded"/>
</xs:sequence>
<xs:anyAttribute namespace="##other" processContents="lax"/>
</xs:complexType>
<xs:element name="Probe" type="tns:ProbeType"/>
<xs:complexType name="ProbeType">
<xs:sequence>
<xs:element ref="tns:Types" minOccurs="0"/>
<xs:element ref="tns:Scopes" minOccurs="0"/>
<xs:any namespace="##other"
processContents="lax"
minOccurs="0"
maxOccurs="unbounded"/>
</xs:sequence>
<xs:anyAttribute namespace="##other" processContents="lax"/>
</xs:complexType>
<xs:element name="ProbeMatches" type="tns:ProbeMatchesType"/>
<xs:complexType name="ProbeMatchesType">
<xs:sequence>
<xs:element name="ProbeMatch"
type="tns:ProbeMatchType"
minOccurs="0"
maxOccurs="unbounded">
</xs:element>
<xs:any namespace="##other"
processContents="lax"
minOccurs="0"
maxOccurs="unbounded"/>
</xs:sequence>
<xs:anyAttribute namespace="##other" processContents="lax"/>
</xs:complexType>
<xs:complexType name="ProbeMatchType">
<xs:sequence>
<xs:element ref="wsa:EndpointReference"/>
<xs:element ref="tns:Types" minOccurs="0"/>
<xs:element ref="tns:Scopes" minOccurs="0"/>
<xs:element ref="tns:XAddrs" minOccurs="0"/>
<xs:element ref="tns:MetadataVersion"/>
<xs:any namespace="##other"
processContents="lax"
minOccurs="0"
maxOccurs="unbounded"/>
</xs:sequence>
<xs:anyAttribute namespace="##other" processContents="lax"/>
</xs:complexType>
<xs:element name="Resolve" type="tns:ResolveType"/>
<xs:complexType name="ResolveType">
<xs:sequence>
<xs:element ref="wsa:EndpointReference"/>
<xs:any namespace="##other"
processContents="lax"
minOccurs="0"
maxOccurs="unbounded"/>
</xs:sequence>
<xs:anyAttribute namespace="##other" processContents="lax"/>
</xs:complexType>
<xs:element name="ResolveMatches" type="tns:ResolveMatchesType"/>
<xs:complexType name="ResolveMatchesType">
<xs:sequence>
<xs:element name="ResolveMatch"
type="tns:ResolveMatchType"
minOccurs="0"/>
<xs:any namespace="##other"
processContents="lax"
minOccurs="0"
maxOccurs="unbounded"/>
</xs:sequence>
<xs:anyAttribute namespace="##other" processContents="lax"/>
</xs:complexType>
<xs:complexType name="ResolveMatchType">
<xs:sequence>
<xs:element ref="wsa:EndpointReference"/>
<xs:element ref="tns:Types" minOccurs="0"/>
<xs:element ref="tns:Scopes" minOccurs="0"/>
<xs:element ref="tns:XAddrs"/>
<xs:element ref="tns:MetadataVersion"/>
<xs:any namespace="##other"
processContents="lax"
minOccurs="0"
maxOccurs="unbounded"/>
</xs:sequence>
<xs:anyAttribute namespace="##other" processContents="lax"/>
</xs:complexType>
<xs:element name="Types" type="tns:QNameListType"/>
<xs:simpleType name="QNameListType">
<xs:list itemType="xs:QName"/>
</xs:simpleType>
<xs:element name="Scopes" type="tns:ScopesType"/>
<xs:complexType name="ScopesType">
<xs:simpleContent>
<xs:extension base="tns:UriListType">
<xs:attribute name="MatchBy" type="xs:anyURI"/>
<xs:anyAttribute namespace="##other" processContents="lax"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:element name="XAddrs" type="tns:UriListType"/>
<xs:simpleType name="UriListType">
<xs:list itemType="xs:anyURI"/>
</xs:simpleType>
<xs:element name="MetadataVersion" type="xs:unsignedInt"/>
<!-- //////////////////// Faults //////////////////// -->
<xs:simpleType name="FaultCodeType">
<xs:restriction base="xs:QName">
<xs:enumeration value="tns:MatchingRuleNotSupported"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="FaultCodeOpenType">
<xs:union memberTypes="tns:FaultCodeType xs:QName"/>
</xs:simpleType>
<xs:element name="SupportedMatchingRules" type="tns:UriListType"/>
<!-- //////////////////// Compact Signature //////////////////// -->
<xs:attribute name="Id" type="xs:ID"/>
<xs:element name="Security" type="tns:SecurityType"/>
<xs:complexType name="SecurityType">
<xs:sequence>
<xs:element ref="tns:Sig" minOccurs="0"/>
</xs:sequence>
<xs:anyAttribute namespace="##other" processContents="lax"/>
</xs:complexType>
<xs:element name="Sig" type="tns:SigType"/>
<xs:complexType name="SigType">
<xs:sequence>
<xs:any namespace="##other"
processContents="lax"
minOccurs="0"
maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="Scheme" type="xs:anyURI" use="required"/>
<xs:attribute name="KeyId" type="xs:base64Binary"/>
<xs:attribute name="Refs" type="xs:IDREFS" use="required"/>
<xs:attribute name="Sig" type="xs:base64Binary" use="required"/>
<xs:anyAttribute namespace="##other" processContents="lax"/>
</xs:complexType>
<!-- //////////////////// General Headers //////////////////// -->
<xs:element name="AppSequence" type="tns:AppSequenceType"/>
<xs:complexType name="AppSequenceType">
<xs:complexContent>
<xs:restriction base="xs:anyType">
<xs:attribute name="InstanceId"
type="xs:unsignedInt"
use="required"/>
<xs:attribute name="SequenceId" type="xs:anyURI"/>
<xs:attribute name="MessageNumber"
type="xs:unsignedInt"
use="required"/>
<xs:anyAttribute namespace="##other" processContents="lax"/>
</xs:restriction>
</xs:complexContent>
</xs:complexType>
</xs:schema>

View File

@ -0,0 +1,89 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="onvif-wsdl-viewer.xsl"?>
<!--
Copyright (c) 2010-2013 by ONVIF: Open Network Video Interface Forum. All rights reserved.
Recipients of this document may copy, distribute, publish, or display this
document so long as this copyright notice, license and disclaimer are
retained with all copies of the document.
THIS DOCUMENT IS PROVIDED "AS IS," AND THE CORPORATION AND ITS MEMBERS AND
THEIR AFFILIATES, MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED,
INCLUDING BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, OR TITLE;
THAT THE CONTENTS OF THIS DOCUMENT ARE SUITABLE FOR ANY PURPOSE;
OR THAT THE IMPLEMENTATION OF SUCH CONTENTS WILL NOT INFRINGE ANY PATENTS,
COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.
IN NO EVENT WILL THE CORPORATION OR ITS MEMBERS OR THEIR AFFILIATES BE LIABLE
FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL, PUNITIVE OR CONSEQUENTIAL
DAMAGES, ARISING OUT OF OR RELATING TO ANY USE OR DISTRIBUTION OF THIS
DOCUMENT, WHETHER OR NOT (1) THE CORPORATION, MEMBERS OR THEIR AFFILIATES
HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES, OR (2) SUCH DAMAGES
WERE REASONABLY FORESEEABLE, AND ARISING OUT OF OR RELATING TO ANY USE OR
DISTRIBUTION OF THIS DOCUMENT.
THE FOREGOING DISCLAIMER AND LIMITATION ON LIABILITY DO NOT APPLY TO,
INVALIDATE, OR LIMIT REPRESENTATIONS AND WARRANTIES MADE BY THE MEMBERS
AND THEIR RESPECTIVE AFFILIATES TO THE CORPORATION AND OTHER MEMBERS IN
CERTAIN WRITTEN POLICIES OF THE CORPORATION.
-->
<xs:schema targetNamespace="http://www.onvif.org/ver10/pacs"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:pt="http://www.onvif.org/ver10/pacs"
elementFormDefault="qualified"
version="1.0">
<!--====== types ======-->
<xs:simpleType name="ReferenceToken">
<xs:annotation>
<xs:documentation>
Type used to reference logical and physical entities.
</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:string">
<xs:maxLength value="64"/>
<xs:minLength value="0"/>
</xs:restriction>
</xs:simpleType>
<!--===============================-->
<xs:complexType name="DataEntity">
<xs:annotation>
<xs:documentation>
General datastructure referenced by a token.
Should be used as extension base.
</xs:documentation>
</xs:annotation>
<xs:sequence>
</xs:sequence>
<xs:attribute name="token" type="pt:ReferenceToken" use="required">
<xs:annotation>
<xs:documentation>A service-unique identifier of the item.</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
<!--===============================-->
<xs:simpleType name="Name">
<xs:annotation>
<xs:documentation>
Type used for names of logical and physical entities.
</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:string">
<xs:maxLength value="64"/>
<xs:minLength value="0"/>
</xs:restriction>
</xs:simpleType>
<!--===============================-->
<xs:simpleType name="Description">
<xs:annotation>
<xs:documentation>
Description is optional and the maximum length is device specific.
If the length is more than maximum length, it is silently chopped to the maximum length
supported by the device/service (which may be 0).
</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:string">
<xs:maxLength value="1024"/>
<xs:minLength value="0"/>
</xs:restriction>
</xs:simpleType>
<!--===============================-->
</xs:schema>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
This xml document functions as a place holder for the ONVIF topic namespace.
Copyright (c) 2008-2010 by ONVIF: Open Network Video Interface Forum. All rights reserved.
Recipients of this document may copy, distribute, publish, or display this document so long as this copyright notice, license and disclaimer are retained with all copies of the document. No license is granted to modify this document.
THIS DOCUMENT IS PROVIDED "AS IS," AND THE CORPORATION AND ITS MEMBERS AND THEIR AFFILIATES, MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, OR TITLE; THAT THE CONTENTS OF THIS DOCUMENT ARE SUITABLE FOR ANY PURPOSE; OR THAT THE IMPLEMENTATION OF SUCH CONTENTS WILL NOT INFRINGE ANY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.
IN NO EVENT WILL THE CORPORATION OR ITS MEMBERS OR THEIR AFFILIATES BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL, PUNITIVE OR CONSEQUENTIAL DAMAGES, ARISING OUT OF OR RELATING TO ANY USE OR DISTRIBUTION OF THIS DOCUMENT, WHETHER OR NOT (1) THE CORPORATION, MEMBERS OR THEIR AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES, OR (2) SUCH DAMAGES WERE REASONABLY FORESEEABLE, AND ARISING OUT OF OR RELATING TO ANY USE OR DISTRIBUTION OF THIS DOCUMENT. THE FOREGOING DISCLAIMER AND LIMITATION ON LIABILITY DO NOT APPLY TO, INVALIDATE, OR LIMIT REPRESENTATIONS AND WARRANTIES MADE BY THE MEMBERS AND THEIR RESPECTIVE AFFILIATES TO THE CORPORATION AND OTHER MEMBERS IN CERTAIN WRITTEN POLICIES OF THE CORPORATION.
-->
<wstop:TopicNamespace name="ONVIF" targetNamespace="http://www.onvif.org/ver10/topics"
xmlns:wstop="http://docs.oasis-open.org/wsn/t-1"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
</wstop:TopicNamespace>

View File

@ -0,0 +1,321 @@
<?xml version='1.0'?>
<?xml-stylesheet href="../2008/09/xsd.xsl" type="text/xsl"?>
<xs:schema targetNamespace="http://www.w3.org/XML/1998/namespace"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns="http://www.w3.org/1999/xhtml"
xml:lang="en">
<xs:annotation>
<xs:documentation>
<div>
<h1>About the XML namespace</h1>
<div class="bodytext">
<p>
This schema document describes the XML namespace, in a form
suitable for import by other schema documents.
</p>
<p>
See <a href="http://www.w3.org/XML/1998/namespace.html">
http://www.w3.org/XML/1998/namespace.html
</a> and
<a href="http://www.w3.org/TR/REC-xml">
http://www.w3.org/TR/REC-xml
</a>
for information
about this namespace.
</p>
<p>
Note that local names in this namespace are intended to be
defined only by the World Wide Web Consortium or its subgroups.
The names currently defined in this namespace are listed below.
They should not be used with conflicting semantics by any Working
Group, specification, or document instance.
</p>
<p>
See further below in this document for more information about <a
href="#usage">how to refer to this schema document from your own
XSD schema documents
</a> and about <a href="#nsversioning">the
namespace-versioning policy governing this schema document</a>.
</p>
</div>
</div>
</xs:documentation>
</xs:annotation>
<xs:attribute name="lang">
<xs:annotation>
<xs:documentation>
<div>
<h3>lang (as an attribute name)</h3>
<p>
denotes an attribute whose value
is a language code for the natural language of the content of
any element; its value is inherited. This name is reserved
by virtue of its definition in the XML specification.
</p>
</div>
<div>
<h4>Notes</h4>
<p>
Attempting to install the relevant ISO 2- and 3-letter
codes as the enumerated possible values is probably never
going to be a realistic possibility.
</p>
<p>
See BCP 47 at
<a href="http://www.rfc-editor.org/rfc/bcp/bcp47.txt">
http://www.rfc-editor.org/rfc/bcp/bcp47.txt
</a>
and the IANA language subtag registry at
<a href="http://www.iana.org/assignments/language-subtag-registry">
http://www.iana.org/assignments/language-subtag-registry
</a>
for further information.
</p>
<p>
The union allows for the 'un-declaration' of xml:lang with
the empty string.
</p>
</div>
</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:union memberTypes="xs:language">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value=""/>
</xs:restriction>
</xs:simpleType>
</xs:union>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="space">
<xs:annotation>
<xs:documentation>
<div>
<h3>space (as an attribute name)</h3>
<p>
denotes an attribute whose
value is a keyword indicating what whitespace processing
discipline is intended for the content of the element; its
value is inherited. This name is reserved by virtue of its
definition in the XML specification.
</p>
</div>
</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:NCName">
<xs:enumeration value="default"/>
<xs:enumeration value="preserve"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="base" type="xs:anyURI">
<xs:annotation>
<xs:documentation>
<div>
<h3>base (as an attribute name)</h3>
<p>
denotes an attribute whose value
provides a URI to be used as the base for interpreting any
relative URIs in the scope of the element on which it
appears; its value is inherited. This name is reserved
by virtue of its definition in the XML Base specification.
</p>
<p>
See
<a
href="http://www.w3.org/TR/xmlbase/">http://www.w3.org/TR/xmlbase/
</a>
for information about this attribute.
</p>
</div>
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="id" type="xs:ID">
<xs:annotation>
<xs:documentation>
<div>
<h3>id (as an attribute name)</h3>
<p>
denotes an attribute whose value
should be interpreted as if declared to be of type ID.
This name is reserved by virtue of its definition in the
xml:id specification.
</p>
<p>
See
<a
href="http://www.w3.org/TR/xml-id/">http://www.w3.org/TR/xml-id/
</a>
for information about this attribute.
</p>
</div>
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attributeGroup name="specialAttrs">
<xs:attribute ref="xml:base"/>
<xs:attribute ref="xml:lang"/>
<xs:attribute ref="xml:space"/>
<xs:attribute ref="xml:id"/>
</xs:attributeGroup>
<xs:annotation>
<xs:documentation>
<div>
<h3>Father (in any context at all)</h3>
<div class="bodytext">
<p>
denotes Jon Bosak, the chair of
the original XML Working Group. This name is reserved by
the following decision of the W3C XML Plenary and
XML Coordination groups:
</p>
<blockquote>
<p>
In appreciation for his vision, leadership and
dedication the W3C XML Plenary on this 10th day of
February, 2000, reserves for Jon Bosak in perpetuity
the XML name "xml:Father".
</p>
</blockquote>
</div>
</div>
</xs:documentation>
</xs:annotation>
<xs:annotation>
<xs:documentation>
<div xml:id="usage" id="usage">
<h2>
<a name="usage">About this schema document</a>
</h2>
<div class="bodytext">
<p>
This schema defines attributes and an attribute group suitable
for use by schemas wishing to allow <code>xml:base</code>,
<code>xml:lang</code>, <code>xml:space</code> or
<code>xml:id</code>
attributes on elements they define.
</p>
<p>
To enable this, such a schema must import this schema for
the XML namespace, e.g. as follows:
</p>
<pre>
&lt;schema . . .>
. . .
&lt;import namespace="http://www.w3.org/XML/1998/namespace"
schemaLocation="http://www.w3.org/2001/xml.xsd"/>
</pre>
<p>
or
</p>
<pre>
&lt;import namespace="http://www.w3.org/XML/1998/namespace"
schemaLocation="http://www.w3.org/2009/01/xml.xsd"/>
</pre>
<p>
Subsequently, qualified reference to any of the attributes or the
group defined below will have the desired effect, e.g.
</p>
<pre>
&lt;type . . .>
. . .
&lt;attributeGroup ref="xml:specialAttrs"/>
</pre>
<p>
will define a type which will schema-validate an instance element
with any of those attributes.
</p>
</div>
</div>
</xs:documentation>
</xs:annotation>
<xs:annotation>
<xs:documentation>
<div id="nsversioning" xml:id="nsversioning">
<h2>
<a name="nsversioning">Versioning policy for this schema document</a>
</h2>
<div class="bodytext">
<p>
In keeping with the XML Schema WG's standard versioning
policy, this schema document will persist at
<a href="http://www.w3.org/2009/01/xml.xsd">
http://www.w3.org/2009/01/xml.xsd</a>.
</p>
<p>
At the date of issue it can also be found at
<a href="http://www.w3.org/2001/xml.xsd">
http://www.w3.org/2001/xml.xsd</a>.
</p>
<p>
The schema document at that URI may however change in the future,
in order to remain compatible with the latest version of XML
Schema itself, or with the XML namespace itself. In other words,
if the XML Schema or XML namespaces change, the version of this
document at
<a href="http://www.w3.org/2001/xml.xsd">
http://www.w3.org/2001/xml.xsd
</a>
will change accordingly; the version at
<a href="http://www.w3.org/2009/01/xml.xsd">
http://www.w3.org/2009/01/xml.xsd
</a>
will not change.
</p>
<p>
Previous dated (and unchanging) versions of this schema
document are at:
</p>
<ul>
<li>
<a href="http://www.w3.org/2009/01/xml.xsd">
http://www.w3.org/2009/01/xml.xsd
</a>
</li>
<li>
<a href="http://www.w3.org/2007/08/xml.xsd">
http://www.w3.org/2007/08/xml.xsd
</a>
</li>
<li>
<a href="http://www.w3.org/2004/10/xml.xsd">
http://www.w3.org/2004/10/xml.xsd
</a>
</li>
<li>
<a href="http://www.w3.org/2001/03/xml.xsd">
http://www.w3.org/2001/03/xml.xsd
</a>
</li>
</ul>
</div>
</div>
</xs:documentation>
</xs:annotation>
</xs:schema>

View File

@ -0,0 +1,165 @@
<!-- Schema defined in the SOAP Version 1.2 Part 1 specification
Recommendation:
http://www.w3.org/TR/2003/REC-soap12-part1-20030624/
$Id: soap-envelope.xsd,v 1.2 2006/12/20 20:43:36 ylafon Exp $
Copyright (C)2003 W3C(R) (MIT, ERCIM, Keio), All Rights Reserved.
W3C viability, trademark, document use and software licensing rules
apply.
http://www.w3.org/Consortium/Legal/
This document is governed by the W3C Software License [1] as
described in the FAQ [2].
[1] http://www.w3.org/Consortium/Legal/copyright-software-19980720
[2] http://www.w3.org/Consortium/Legal/IPR-FAQ-20000620.html#DTD
-->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:tns="http://www.w3.org/2003/05/soap-envelope"
targetNamespace="http://www.w3.org/2003/05/soap-envelope"
elementFormDefault="qualified" >
<xs:import namespace="http://www.w3.org/XML/1998/namespace"
schemaLocation="http://www.w3.org/2001/xml.xsd"/>
<!-- Envelope, header and body -->
<xs:element name="Envelope" type="tns:Envelope" />
<xs:complexType name="Envelope" >
<xs:sequence>
<xs:element ref="tns:Header" minOccurs="0" />
<xs:element ref="tns:Body" minOccurs="1" />
</xs:sequence>
<xs:anyAttribute namespace="##other" processContents="lax" />
</xs:complexType>
<xs:element name="Header" type="tns:Header" />
<xs:complexType name="Header" >
<xs:annotation>
<xs:documentation>
Elements replacing the wildcard MUST be namespace qualified, but can be in the targetNamespace
</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
<xs:anyAttribute namespace="##other" processContents="lax" />
</xs:complexType>
<xs:element name="Body" type="tns:Body" />
<xs:complexType name="Body" >
<xs:sequence>
<xs:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
<xs:anyAttribute namespace="##other" processContents="lax" />
</xs:complexType>
<!-- Global Attributes. The following attributes are intended to be
usable via qualified attribute names on any complex type referencing
them. -->
<xs:attribute name="mustUnderstand" type="xs:boolean" default="0" />
<xs:attribute name="relay" type="xs:boolean" default="0" />
<xs:attribute name="role" type="xs:anyURI" />
<!-- 'encodingStyle' indicates any canonicalization conventions
followed in the contents of the containing element. For example, the
value 'http://www.w3.org/2003/05/soap-encoding' indicates the pattern
described in the SOAP Version 1.2 Part 2: Adjuncts Recommendation -->
<xs:attribute name="encodingStyle" type="xs:anyURI" />
<xs:element name="Fault" type="tns:Fault" />
<xs:complexType name="Fault" final="extension" >
<xs:annotation>
<xs:documentation>
Fault reporting structure
</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element name="Code" type="tns:faultcode" />
<xs:element name="Reason" type="tns:faultreason" />
<xs:element name="Node" type="xs:anyURI" minOccurs="0" />
<xs:element name="Role" type="xs:anyURI" minOccurs="0" />
<xs:element name="Detail" type="tns:detail" minOccurs="0" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="faultreason" >
<xs:sequence>
<xs:element name="Text" type="tns:reasontext"
minOccurs="1" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="reasontext" >
<xs:simpleContent>
<xs:extension base="xs:string" >
<xs:attribute ref="xml:lang" use="required" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType name="faultcode">
<xs:sequence>
<xs:element name="Value"
type="tns:faultcodeEnum"/>
<xs:element name="Subcode"
type="tns:subcode"
minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:simpleType name="faultcodeEnum">
<xs:restriction base="xs:QName">
<xs:enumeration value="tns:DataEncodingUnknown"/>
<xs:enumeration value="tns:MustUnderstand"/>
<xs:enumeration value="tns:Receiver"/>
<xs:enumeration value="tns:Sender"/>
<xs:enumeration value="tns:VersionMismatch"/>
</xs:restriction>
</xs:simpleType>
<xs:complexType name="subcode">
<xs:sequence>
<xs:element name="Value"
type="xs:QName"/>
<xs:element name="Subcode"
type="tns:subcode"
minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="detail">
<xs:sequence>
<xs:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
<xs:anyAttribute namespace="##other" processContents="lax" />
</xs:complexType>
<!-- Global element declaration and complex type definition for header entry returned due to a mustUnderstand fault -->
<xs:element name="NotUnderstood" type="tns:NotUnderstoodType" />
<xs:complexType name="NotUnderstoodType" >
<xs:attribute name="qname" type="xs:QName" use="required" />
</xs:complexType>
<!-- Global element and associated types for managing version transition as described in Appendix A of the SOAP Version 1.2 Part 1 Recommendation --> <xs:complexType name="SupportedEnvType" >
<xs:attribute name="qname" type="xs:QName" use="required" />
</xs:complexType>
<xs:element name="Upgrade" type="tns:UpgradeType" />
<xs:complexType name="UpgradeType" >
<xs:sequence>
<xs:element name="SupportedEnvelope" type="tns:SupportedEnvType" minOccurs="1" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
</xs:schema>

View File

@ -0,0 +1,13 @@
<xs:schema xmlns:xs='http://www.w3.org/2001/XMLSchema'
xmlns:tns='http://www.w3.org/2004/08/xop/include'
targetNamespace='http://www.w3.org/2004/08/xop/include' >
<xs:element name='Include' type='tns:Include' />
<xs:complexType name='Include' >
<xs:sequence>
<xs:any namespace='##other' minOccurs='0' maxOccurs='unbounded' />
</xs:sequence>
<xs:attribute name='href' type='xs:anyURI' use='required' />
<xs:anyAttribute namespace='##other' />
</xs:complexType>
</xs:schema>

View File

@ -0,0 +1,49 @@
<?xml version="1.0" ?>
<!--
W3C XML Schema defined in the Describing Media Content of Binary Data in XML
specification
http://www.w3.org/TR/xml-media-types
Copyright © 2005 World Wide Web Consortium,
(Massachusetts Institute of Technology, European Research Consortium for
Informatics and Mathematics, Keio University). All Rights Reserved. This
work is distributed under the W3C® Software License [1] in the hope that
it will be useful, but WITHOUT ANY WARRANTY; without even the implied
warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
[1] http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
$Id: xmlmime.xsd,v 1.1 2005/04/25 17:08:35 hugo Exp $
-->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xmime="http://www.w3.org/2005/05/xmlmime"
targetNamespace="http://www.w3.org/2005/05/xmlmime" >
<xs:attribute name="contentType">
<xs:simpleType>
<xs:restriction base="xs:string" >
<xs:minLength value="3" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="expectedContentTypes" type="xs:string" />
<xs:complexType name="base64Binary" >
<xs:simpleContent>
<xs:extension base="xs:base64Binary" >
<xs:attribute ref="xmime:contentType" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType name="hexBinary" >
<xs:simpleContent>
<xs:extension base="xs:hexBinary" >
<xs:attribute ref="xmime:contentType" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:schema>

View File

@ -0,0 +1,144 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
W3C XML Schema defined in the Web Services Addressing 1.0 specification
http://www.w3.org/TR/ws-addr-core
Copyright © 2005 World Wide Web Consortium,
(Massachusetts Institute of Technology, European Research Consortium for
Informatics and Mathematics, Keio University). All Rights Reserved. This
work is distributed under the W3C® Software License [1] in the hope that
it will be useful, but WITHOUT ANY WARRANTY; without even the implied
warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
[1] http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
$Id: ws-addr.xsd,v 1.4 2008/07/14 18:48:47 plehegar Exp $
-->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://www.w3.org/2005/08/addressing" targetNamespace="http://www.w3.org/2005/08/addressing" blockDefault="#all" elementFormDefault="qualified" finalDefault="" attributeFormDefault="unqualified">
<!-- Constructs from the WS-Addressing Core -->
<xs:element name="EndpointReference" type="tns:EndpointReferenceType"/>
<xs:complexType name="EndpointReferenceType" mixed="false">
<xs:sequence>
<xs:element name="Address" type="tns:AttributedURIType"/>
<xs:element name="ReferenceParameters" type="tns:ReferenceParametersType" minOccurs="0"/>
<xs:element ref="tns:Metadata" minOccurs="0"/>
<xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:anyAttribute namespace="##other" processContents="lax"/>
</xs:complexType>
<xs:complexType name="ReferenceParametersType" mixed="false">
<xs:sequence>
<xs:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:anyAttribute namespace="##other" processContents="lax"/>
</xs:complexType>
<xs:element name="Metadata" type="tns:MetadataType"/>
<xs:complexType name="MetadataType" mixed="false">
<xs:sequence>
<xs:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:anyAttribute namespace="##other" processContents="lax"/>
</xs:complexType>
<xs:element name="MessageID" type="tns:AttributedURIType"/>
<xs:element name="RelatesTo" type="tns:RelatesToType"/>
<xs:complexType name="RelatesToType" mixed="false">
<xs:simpleContent>
<xs:extension base="xs:anyURI">
<xs:attribute name="RelationshipType" type="tns:RelationshipTypeOpenEnum" use="optional" default="http://www.w3.org/2005/08/addressing/reply"/>
<xs:anyAttribute namespace="##other" processContents="lax"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:simpleType name="RelationshipTypeOpenEnum">
<xs:union memberTypes="tns:RelationshipType xs:anyURI"/>
</xs:simpleType>
<xs:simpleType name="RelationshipType">
<xs:restriction base="xs:anyURI">
<xs:enumeration value="http://www.w3.org/2005/08/addressing/reply"/>
</xs:restriction>
</xs:simpleType>
<xs:element name="ReplyTo" type="tns:EndpointReferenceType"/>
<xs:element name="From" type="tns:EndpointReferenceType"/>
<xs:element name="FaultTo" type="tns:EndpointReferenceType"/>
<xs:element name="To" type="tns:AttributedURIType"/>
<xs:element name="Action" type="tns:AttributedURIType"/>
<xs:complexType name="AttributedURIType" mixed="false">
<xs:simpleContent>
<xs:extension base="xs:anyURI">
<xs:anyAttribute namespace="##other" processContents="lax"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<!-- Constructs from the WS-Addressing SOAP binding -->
<xs:attribute name="IsReferenceParameter" type="xs:boolean"/>
<xs:simpleType name="FaultCodesOpenEnumType">
<xs:union memberTypes="tns:FaultCodesType xs:QName"/>
</xs:simpleType>
<xs:simpleType name="FaultCodesType">
<xs:restriction base="xs:QName">
<xs:enumeration value="tns:InvalidAddressingHeader"/>
<xs:enumeration value="tns:InvalidAddress"/>
<xs:enumeration value="tns:InvalidEPR"/>
<xs:enumeration value="tns:InvalidCardinality"/>
<xs:enumeration value="tns:MissingAddressInEPR"/>
<xs:enumeration value="tns:DuplicateMessageID"/>
<xs:enumeration value="tns:ActionMismatch"/>
<xs:enumeration value="tns:MessageAddressingHeaderRequired"/>
<xs:enumeration value="tns:DestinationUnreachable"/>
<xs:enumeration value="tns:ActionNotSupported"/>
<xs:enumeration value="tns:EndpointUnavailable"/>
</xs:restriction>
</xs:simpleType>
<xs:element name="RetryAfter" type="tns:AttributedUnsignedLongType"/>
<xs:complexType name="AttributedUnsignedLongType" mixed="false">
<xs:simpleContent>
<xs:extension base="xs:unsignedLong">
<xs:anyAttribute namespace="##other" processContents="lax"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:element name="ProblemHeaderQName" type="tns:AttributedQNameType"/>
<xs:complexType name="AttributedQNameType" mixed="false">
<xs:simpleContent>
<xs:extension base="xs:QName">
<xs:anyAttribute namespace="##other" processContents="lax"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:element name="ProblemHeader" type="tns:AttributedAnyType"/>
<xs:complexType name="AttributedAnyType" mixed="false">
<xs:sequence>
<xs:any namespace="##any" processContents="lax" minOccurs="1" maxOccurs="1"/>
</xs:sequence>
<xs:anyAttribute namespace="##other" processContents="lax"/>
</xs:complexType>
<xs:element name="ProblemIRI" type="tns:AttributedURIType"/>
<xs:element name="ProblemAction" type="tns:ProblemActionType"/>
<xs:complexType name="ProblemActionType" mixed="false">
<xs:sequence>
<xs:element ref="tns:Action" minOccurs="0"/>
<xs:element name="SoapAction" minOccurs="0" type="xs:anyURI"/>
</xs:sequence>
<xs:anyAttribute namespace="##other" processContents="lax"/>
</xs:complexType>
</xs:schema>

View File

@ -0,0 +1,141 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
W3C XML Schema defined in the Web Services Addressing 1.0 specification
http://www.w3.org/TR/ws-addr-core
Copyright © 2005 World Wide Web Consortium,
(Massachusetts Institute of Technology, European Research Consortium for
Informatics and Mathematics, Keio University). All Rights Reserved. This
work is distributed under the W3C® Software License [1] in the hope that
it will be useful, but WITHOUT ANY WARRANTY; without even the implied
warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
[1] http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
$Id: ws-addr.xsd,v 1.2 2008/07/23 13:38:16 plehegar Exp $
-->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:tns="http://www.w3.org/2005/08/addressing"
targetNamespace="http://www.w3.org/2005/08/addressing" blockDefault="#all"
elementFormDefault="qualified" finalDefault="" attributeFormDefault="unqualified">
<!-- Constructs from the WS-Addressing Core -->
<xs:element name="EndpointReference" type="tns:EndpointReferenceType"/>
<xs:complexType name="EndpointReferenceType" mixed="false">
<xs:sequence>
<xs:element name="Address" type="tns:AttributedURIType"/>
<xs:element ref="tns:ReferenceParameters" minOccurs="0"/>
<xs:element ref="tns:Metadata" minOccurs="0"/>
<xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:anyAttribute namespace="##other" processContents="lax"/>
</xs:complexType>
<xs:element name="ReferenceParameters" type="tns:ReferenceParametersType"/>
<xs:complexType name="ReferenceParametersType" mixed="false">
<xs:sequence>
<xs:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:anyAttribute namespace="##other" processContents="lax"/>
</xs:complexType>
<xs:element name="Metadata" type="tns:MetadataType"/>
<xs:complexType name="MetadataType" mixed="false">
<xs:sequence>
<xs:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:anyAttribute namespace="##other" processContents="lax"/>
</xs:complexType>
<xs:element name="MessageID" type="tns:AttributedURIType"/>
<xs:element name="RelatesTo" type="tns:RelatesToType"/>
<xs:complexType name="RelatesToType" mixed="false">
<xs:simpleContent>
<xs:extension base="xs:anyURI">
<xs:attribute name="RelationshipType" type="tns:RelationshipTypeOpenEnum" use="optional"
default="http://www.w3.org/2005/08/addressing/reply"/>
<xs:anyAttribute namespace="##other" processContents="lax"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:simpleType name="RelationshipTypeOpenEnum">
<xs:union memberTypes="tns:RelationshipType xs:anyURI"/>
</xs:simpleType>
<xs:simpleType name="RelationshipType">
<xs:restriction base="xs:anyURI">
<xs:enumeration value="http://www.w3.org/2005/08/addressing/reply"/>
</xs:restriction>
</xs:simpleType>
<xs:element name="ReplyTo" type="tns:EndpointReferenceType"/>
<xs:element name="From" type="tns:EndpointReferenceType"/>
<xs:element name="FaultTo" type="tns:EndpointReferenceType"/>
<xs:element name="To" type="tns:AttributedURIType"/>
<xs:element name="Action" type="tns:AttributedURIType"/>
<xs:complexType name="AttributedURIType" mixed="false">
<xs:simpleContent>
<xs:extension base="xs:anyURI">
<xs:anyAttribute namespace="##other" processContents="lax"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<!-- Constructs from the WS-Addressing SOAP binding -->
<xs:attribute name="IsReferenceParameter" type="xs:boolean"/>
<xs:simpleType name="FaultCodesOpenEnumType">
<xs:union memberTypes="tns:FaultCodesType xs:QName"/>
</xs:simpleType>
<xs:simpleType name="FaultCodesType">
<xs:restriction base="xs:QName">
<xs:enumeration value="tns:InvalidAddressingHeader"/>
<xs:enumeration value="tns:InvalidAddress"/>
<xs:enumeration value="tns:InvalidEPR"/>
<xs:enumeration value="tns:InvalidCardinality"/>
<xs:enumeration value="tns:MissingAddressInEPR"/>
<xs:enumeration value="tns:DuplicateMessageID"/>
<xs:enumeration value="tns:ActionMismatch"/>
<xs:enumeration value="tns:MessageAddressingHeaderRequired"/>
<xs:enumeration value="tns:DestinationUnreachable"/>
<xs:enumeration value="tns:ActionNotSupported"/>
<xs:enumeration value="tns:EndpointUnavailable"/>
</xs:restriction>
</xs:simpleType>
<xs:element name="RetryAfter" type="tns:AttributedUnsignedLongType"/>
<xs:complexType name="AttributedUnsignedLongType" mixed="false">
<xs:simpleContent>
<xs:extension base="xs:unsignedLong">
<xs:anyAttribute namespace="##other" processContents="lax"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:element name="ProblemHeaderQName" type="tns:AttributedQNameType"/>
<xs:complexType name="AttributedQNameType" mixed="false">
<xs:simpleContent>
<xs:extension base="xs:QName">
<xs:anyAttribute namespace="##other" processContents="lax"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:element name="ProblemIRI" type="tns:AttributedURIType"/>
<xs:element name="ProblemAction" type="tns:ProblemActionType"/>
<xs:complexType name="ProblemActionType" mixed="false">
<xs:sequence>
<xs:element ref="tns:Action" minOccurs="0"/>
<xs:element name="SoapAction" minOccurs="0" type="xs:anyURI"/>
</xs:sequence>
<xs:anyAttribute namespace="##other" processContents="lax"/>
</xs:complexType>
</xs:schema>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,423 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="../ver20/util/onvif-wsdl-viewer.xsl"?>
<!--
Copyright (c) 2008-2010 by ONVIF: Open Network Video Interface Forum. All rights reserved.
Recipients of this document may copy, distribute, publish, or display this document so long as this copyright notice, license and disclaimer are retained with all copies of the document. No license is granted to modify this document.
THIS DOCUMENT IS PROVIDED "AS IS," AND THE CORPORATION AND ITS MEMBERS AND THEIR AFFILIATES, MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, OR TITLE; THAT THE CONTENTS OF THIS DOCUMENT ARE SUITABLE FOR ANY PURPOSE; OR THAT THE IMPLEMENTATION OF SUCH CONTENTS WILL NOT INFRINGE ANY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.
IN NO EVENT WILL THE CORPORATION OR ITS MEMBERS OR THEIR AFFILIATES BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL, PUNITIVE OR CONSEQUENTIAL DAMAGES, ARISING OUT OF OR RELATING TO ANY USE OR DISTRIBUTION OF THIS DOCUMENT, WHETHER OR NOT (1) THE CORPORATION, MEMBERS OR THEIR AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES, OR (2) SUCH DAMAGES WERE REASONABLY FORESEEABLE, AND ARISING OUT OF OR RELATING TO ANY USE OR DISTRIBUTION OF THIS DOCUMENT. THE FOREGOING DISCLAIMER AND LIMITATION ON LIABILITY DO NOT APPLY TO, INVALIDATE, OR LIMIT REPRESENTATIONS AND WARRANTIES MADE BY THE MEMBERS AND THEIR RESPECTIVE AFFILIATES TO THE CORPORATION AND OTHER MEMBERS IN CERTAIN WRITTEN POLICIES OF THE CORPORATION.
-->
<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:trv="http://www.onvif.org/ver10/receiver/wsdl"
targetNamespace="http://www.onvif.org/ver10/receiver/wsdl">
<wsdl:types>
<xs:schema targetNamespace="http://www.onvif.org/ver10/receiver/wsdl"
xmlns:tt="http://www.onvif.org/ver10/schema" xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified" version="2.1.1">
<xs:import namespace="http://www.onvif.org/ver10/schema"
schemaLocation="../ver10/schema/onvif.xsd"/>
<!-- Message Request/Responses elements -->
<!--===============================-->
<xs:element name="GetServiceCapabilities">
<xs:complexType>
<xs:sequence/>
</xs:complexType>
</xs:element>
<xs:element name="GetServiceCapabilitiesResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="Capabilities" type="trv:Capabilities">
<xs:annotation>
<xs:documentation>The capabilities for the receiver service is returned in the
Capabilities element.
</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:complexType name="Capabilities">
<xs:sequence>
<xs:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="RTP_Multicast" type="xs:boolean">
<xs:annotation>
<xs:documentation>Indicates that the device can receive RTP multicast streams.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="RTP_TCP" type="xs:boolean">
<xs:annotation>
<xs:documentation>Indicates that the device can receive RTP/TCP streams
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="RTP_RTSP_TCP" type="xs:boolean">
<xs:annotation>
<xs:documentation>Indicates that the device can receive RTP/RTSP/TCP streams.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="SupportedReceivers" type="xs:int" use="required">
<xs:annotation>
<xs:documentation>The maximum number of receivers supported by the device.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="MaximumRTSPURILength" type="xs:int">
<xs:annotation>
<xs:documentation>The maximum allowed length for RTSP URIs (Minimum and default value is
128 octet).
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:anyAttribute processContents="lax"/>
</xs:complexType>
<xs:element name="Capabilities" type="trv:Capabilities"/>
<!--===============================-->
<xs:element name="GetReceivers">
<xs:complexType>
<xs:sequence>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="GetReceiversResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="Receivers" type="tt:Receiver" minOccurs="0" maxOccurs="unbounded">
<xs:annotation>
<xs:documentation>A list of all receivers that currently exist on the device.
</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="GetReceiver">
<xs:complexType>
<xs:sequence>
<xs:element name="ReceiverToken" type="tt:ReferenceToken">
<xs:annotation>
<xs:documentation>The token of the receiver to be retrieved.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="GetReceiverResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="Receiver" type="tt:Receiver">
<xs:annotation>
<xs:documentation>The details of the receiver.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="CreateReceiver">
<xs:complexType>
<xs:sequence>
<xs:element name="Configuration" type="tt:ReceiverConfiguration">
<xs:annotation>
<xs:documentation>The initial configuration for the new receiver.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="CreateReceiverResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="Receiver" type="tt:Receiver">
<xs:annotation>
<xs:documentation>The details of the receiver that was created.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="DeleteReceiver">
<xs:complexType>
<xs:sequence>
<xs:element name="ReceiverToken" type="tt:ReferenceToken">
<xs:annotation>
<xs:documentation>The token of the receiver to be deleted.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="DeleteReceiverResponse">
<xs:complexType>
<xs:sequence>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="ConfigureReceiver">
<xs:complexType>
<xs:sequence>
<xs:element name="ReceiverToken" type="tt:ReferenceToken">
<xs:annotation>
<xs:documentation>The token of the receiver to be configured.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="Configuration" type="tt:ReceiverConfiguration">
<xs:annotation>
<xs:documentation>The new configuration for the receiver.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="ConfigureReceiverResponse">
<xs:complexType>
<xs:sequence>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="SetReceiverMode">
<xs:complexType>
<xs:sequence>
<xs:element name="ReceiverToken" type="tt:ReferenceToken">
<xs:annotation>
<xs:documentation>The token of the receiver to be changed.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="Mode" type="tt:ReceiverMode">
<xs:annotation>
<xs:documentation>The new receiver mode. Options available are:</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="SetReceiverModeResponse">
<xs:complexType>
<xs:sequence>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="GetReceiverState">
<xs:complexType>
<xs:sequence>
<xs:element name="ReceiverToken" type="tt:ReferenceToken">
<xs:annotation>
<xs:documentation>The token of the receiver to be queried.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="GetReceiverStateResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="ReceiverState" type="tt:ReceiverStateInformation">
<xs:annotation>
<xs:documentation>Description of the current receiver state.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
</wsdl:types>
<wsdl:message name="GetServiceCapabilitiesRequest">
<wsdl:part name="parameters" element="trv:GetServiceCapabilities"/>
</wsdl:message>
<wsdl:message name="GetServiceCapabilitiesResponse">
<wsdl:part name="parameters" element="trv:GetServiceCapabilitiesResponse"/>
</wsdl:message>
<wsdl:message name="GetReceiversRequest">
<wsdl:part name="parameters" element="trv:GetReceivers"/>
</wsdl:message>
<wsdl:message name="GetReceiversResponse">
<wsdl:part name="parameters" element="trv:GetReceiversResponse"/>
</wsdl:message>
<wsdl:message name="GetReceiverRequest">
<wsdl:part name="parameters" element="trv:GetReceiver"/>
</wsdl:message>
<wsdl:message name="GetReceiverResponse">
<wsdl:part name="parameters" element="trv:GetReceiverResponse"/>
</wsdl:message>
<wsdl:message name="CreateReceiverRequest">
<wsdl:part name="parameters" element="trv:CreateReceiver"/>
</wsdl:message>
<wsdl:message name="CreateReceiverResponse">
<wsdl:part name="parameters" element="trv:CreateReceiverResponse"/>
</wsdl:message>
<wsdl:message name="DeleteReceiverRequest">
<wsdl:part name="parameters" element="trv:DeleteReceiver"/>
</wsdl:message>
<wsdl:message name="DeleteReceiverResponse">
<wsdl:part name="parameters" element="trv:DeleteReceiverResponse"/>
</wsdl:message>
<wsdl:message name="ConfigureReceiverRequest">
<wsdl:part name="parameters" element="trv:ConfigureReceiver"/>
</wsdl:message>
<wsdl:message name="ConfigureReceiverResponse">
<wsdl:part name="parameters" element="trv:ConfigureReceiverResponse"/>
</wsdl:message>
<wsdl:message name="SetReceiverModeRequest">
<wsdl:part name="parameters" element="trv:SetReceiverMode"/>
</wsdl:message>
<wsdl:message name="SetReceiverModeResponse">
<wsdl:part name="parameters" element="trv:SetReceiverModeResponse"/>
</wsdl:message>
<wsdl:message name="GetReceiverStateRequest">
<wsdl:part name="parameters" element="trv:GetReceiverState"/>
</wsdl:message>
<wsdl:message name="GetReceiverStateResponse">
<wsdl:part name="parameters" element="trv:GetReceiverStateResponse"/>
</wsdl:message>
<wsdl:portType name="ReceiverPort">
<wsdl:operation name="GetServiceCapabilities">
<wsdl:documentation>Returns the capabilities of the receiver service. The result is returned
in a typed answer.
</wsdl:documentation>
<wsdl:input message="trv:GetServiceCapabilitiesRequest"/>
<wsdl:output message="trv:GetServiceCapabilitiesResponse"/>
</wsdl:operation>
<wsdl:operation name="GetReceivers">
<wsdl:documentation>
Lists all receivers currently present on a device. This operation is mandatory.
</wsdl:documentation>
<wsdl:input message="trv:GetReceiversRequest"/>
<wsdl:output message="trv:GetReceiversResponse"/>
</wsdl:operation>
<wsdl:operation name="GetReceiver">
<wsdl:documentation>
Retrieves the details of a specific receiver. This operation is mandatory.
</wsdl:documentation>
<wsdl:input message="trv:GetReceiverRequest"/>
<wsdl:output message="trv:GetReceiverResponse"/>
</wsdl:operation>
<wsdl:operation name="CreateReceiver">
<wsdl:documentation>
Creates a new receiver. This operation is mandatory, although the service may
raise a fault if the receiver cannot be created.
</wsdl:documentation>
<wsdl:input message="trv:CreateReceiverRequest"/>
<wsdl:output message="trv:CreateReceiverResponse"/>
</wsdl:operation>
<wsdl:operation name="DeleteReceiver">
<wsdl:documentation>
Deletes an existing receiver. A receiver may be deleted only if it is not
currently in use; otherwise a fault shall be raised.
This operation is mandatory.
</wsdl:documentation>
<wsdl:input message="trv:DeleteReceiverRequest"/>
<wsdl:output message="trv:DeleteReceiverResponse"/>
</wsdl:operation>
<wsdl:operation name="ConfigureReceiver">
<wsdl:documentation>
Configures an existing receiver. This operation is mandatory.
</wsdl:documentation>
<wsdl:input message="trv:ConfigureReceiverRequest"/>
<wsdl:output message="trv:ConfigureReceiverResponse"/>
</wsdl:operation>
<wsdl:operation name="SetReceiverMode">
<wsdl:documentation>
Sets the mode of the receiver without affecting the rest of its configuration.
This operation is mandatory.
</wsdl:documentation>
<wsdl:input message="trv:SetReceiverModeRequest"/>
<wsdl:output message="trv:SetReceiverModeResponse"/>
</wsdl:operation>
<wsdl:operation name="GetReceiverState">
<wsdl:documentation>
Determines whether the receiver is currently disconnected, connected or
attempting to connect.
This operation is mandatory.
</wsdl:documentation>
<wsdl:input message="trv:GetReceiverStateRequest"/>
<wsdl:output message="trv:GetReceiverStateResponse"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="ReceiverBinding" type="trv:ReceiverPort">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="GetServiceCapabilities">
<soap:operation soapAction="http://www.onvif.org/ver10/receiver/wsdl/GetServiceCapabilities"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="GetReceivers">
<soap:operation soapAction="http://www.onvif.org/ver10/receiver/wsdl/GetReceivers"/>
<wsdl:input>
<soap:body parts="parameters" use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body parts="parameters" use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="GetReceiver">
<soap:operation soapAction="http://www.onvif.org/ver10/receiver/wsdl/GetReceiver"/>
<wsdl:input>
<soap:body parts="parameters" use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body parts="parameters" use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="CreateReceiver">
<soap:operation soapAction="http://www.onvif.org/ver10/receiver/wsdl/CreateReceiver"/>
<wsdl:input>
<soap:body parts="parameters" use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body parts="parameters" use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="DeleteReceiver">
<soap:operation soapAction="http://www.onvif.org/ver10/receiver/wsdl/DeleteReceiver"/>
<wsdl:input>
<soap:body parts="parameters" use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body parts="parameters" use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="ConfigureReceiver">
<soap:operation soapAction="http://www.onvif.org/ver10/receiver/wsdl/ConfigureReceiver"/>
<wsdl:input>
<soap:body parts="parameters" use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body parts="parameters" use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="SetReceiverMode">
<soap:operation soapAction="http://www.onvif.org/ver10/receiver/wsdl/SetReceiverMode"/>
<wsdl:input>
<soap:body parts="parameters" use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body parts="parameters" use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="GetReceiverState">
<soap:operation soapAction="http://www.onvif.org/ver10/receiver/wsdl/GetReceiverState"/>
<wsdl:input>
<soap:body parts="parameters" use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body parts="parameters" use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<!--===============================-->
<!--===============================-->
<wsdl:service name="ReceiverService">
<wsdl:port name="ReceiverPort" binding="trv:ReceiverBinding">
<soap:address location="http://www.onvif.org/ver10/receiver/wsdl"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,112 @@
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="http://www.onvif.org/onvif/ver20/util/onvif-wsdl-viewer.xsl"?>
<!--
Copyright (c) 2008-2010 by ONVIF: Open Network Video Interface Forum. All rights reserved.
Recipients of this document may copy, distribute, publish, or display this document so long as this copyright notice, license and disclaimer are retained with all copies of the document. No license is granted to modify this document.
THIS DOCUMENT IS PROVIDED "AS IS," AND THE CORPORATION AND ITS MEMBERS AND THEIR AFFILIATES, MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, OR TITLE; THAT THE CONTENTS OF THIS DOCUMENT ARE SUITABLE FOR ANY PURPOSE; OR THAT THE IMPLEMENTATION OF SUCH CONTENTS WILL NOT INFRINGE ANY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.
IN NO EVENT WILL THE CORPORATION OR ITS MEMBERS OR THEIR AFFILIATES BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL, PUNITIVE OR CONSEQUENTIAL DAMAGES, ARISING OUT OF OR RELATING TO ANY USE OR DISTRIBUTION OF THIS DOCUMENT, WHETHER OR NOT (1) THE CORPORATION, MEMBERS OR THEIR AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES, OR (2) SUCH DAMAGES WERE REASONABLY FORESEEABLE, AND ARISING OUT OF OR RELATING TO ANY USE OR DISTRIBUTION OF THIS DOCUMENT. THE FOREGOING DISCLAIMER AND LIMITATION ON LIABILITY DO NOT APPLY TO, INVALIDATE, OR LIMIT REPRESENTATIONS AND WARRANTIES MADE BY THE MEMBERS AND THEIR RESPECTIVE AFFILIATES TO THE CORPORATION AND OTHER MEMBERS IN CERTAIN WRITTEN POLICIES OF THE CORPORATION.
-->
<wsdl:definitions xmlns:dn="http://www.onvif.org/ver10/network/wsdl"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap12/"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.onvif.org/ver10/network/wsdl">
<wsdl:types>
<xs:schema targetNamespace="http://www.onvif.org/ver10/network/wsdl"
xmlns:d="http://schemas.xmlsoap.org/ws/2005/04/discovery" elementFormDefault="qualified">
<xs:import namespace="http://schemas.xmlsoap.org/ws/2005/04/discovery"
schemaLocation="http://schemas.xmlsoap.org/ws/2005/04/discovery/ws-discovery.xsd"/>
<!-- Message Request/Responses elements -->
<!--===============================-->
<xs:element name="Hello" type="d:HelloType"/>
<xs:element name="HelloResponse" type="d:ResolveType"/>
<xs:element name="Probe" type="d:ProbeType"/>
<xs:element name="ProbeResponse" type="d:ProbeMatchesType"/>
<xs:element name="Bye" type="d:ByeType"/>
<xs:element name="ByeResponse" type="d:ResolveType"/>
<!--===============================-->
</xs:schema>
</wsdl:types>
<wsdl:message name="HelloRequest">
<wsdl:part name="parameters" element="dn:Hello"/>
</wsdl:message>
<wsdl:message name="HelloResponse">
<wsdl:part name="parameters" element="dn:HelloResponse"/>
</wsdl:message>
<wsdl:message name="ProbeRequest">
<wsdl:part name="parameters" element="dn:Probe"/>
</wsdl:message>
<wsdl:message name="ProbeResponse">
<wsdl:part name="parameters" element="dn:ProbeResponse"/>
</wsdl:message>
<wsdl:message name="ByeRequest">
<wsdl:part name="parameters" element="dn:Bye"/>
</wsdl:message>
<wsdl:message name="ByeResponse">
<wsdl:part name="parameters" element="dn:ByeResponse"/>
</wsdl:message>
<wsdl:portType name="RemoteDiscoveryPort">
<wsdl:operation name="Hello">
<wsdl:input message="dn:HelloRequest"
dn:Action="http://schemas.xmlsoap.org/ws/2005/04/discovery/Hello"/>
<wsdl:output message="dn:HelloResponse"
dn:Action="http://schemas.xmlsoap.org/ws/2005/04/discovery/Probe"/>
</wsdl:operation>
<wsdl:operation name="Bye">
<wsdl:input message="dn:ByeRequest"
dn:Action="http://schemas.xmlsoap.org/ws/2005/04/discovery/Bye"/>
<wsdl:output message="dn:ByeResponse"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:portType name="DiscoveryLookupPort">
<wsdl:operation name="Probe">
<wsdl:input message="dn:ProbeRequest"
dn:Action="http://schemas.xmlsoap.org/ws/2005/04/discovery/Probe"/>
<wsdl:output message="dn:ProbeResponse"
dn:Action="http://schemas.xmlsoap.org/ws/2005/04/discovery/ProbeMatches"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="RemoteDiscoveryBinding" type="dn:RemoteDiscoveryPort">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="Hello">
<soap:operation soapAction="http://www.onvif.org/ver10/network/wsdl/Hello"/>
<wsdl:input>
<soap:body parts="parameters" use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body parts="parameters" use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="Bye">
<soap:operation soapAction="http://www.onvif.org/ver10/network/wsdl/Bye"/>
<wsdl:input>
<soap:body parts="parameters" use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body parts="parameters" use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:binding name="DiscoveryLookupBinding" type="dn:DiscoveryLookupPort">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="Probe">
<soap:operation soapAction="http://www.onvif.org/ver10/network/wsdl/Probe"/>
<wsdl:input>
<soap:body parts="parameters" use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body parts="parameters" use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="DiscoveryService">
<wsdl:port name="DiscoveryLookupPort" binding="dn:DiscoveryLookupBinding">
<soap:address location="http://www.onvif.org/ver10/network/wsdl"/>
</wsdl:port>
<wsdl:port name="RemoteDiscoveryPort" binding="dn:RemoteDiscoveryBinding">
<soap:address location="http://www.onvif.org/ver10/network/wsdl"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>

View File

@ -0,0 +1,243 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="../ver20/util/onvif-wsdl-viewer.xsl"?>
<!--
Copyright (c) 2008-2010 by ONVIF: Open Network Video Interface Forum. All rights reserved.
Recipients of this document may copy, distribute, publish, or display this document so long as this copyright notice, license and disclaimer are retained with all copies of the document. No license is granted to modify this document.
THIS DOCUMENT IS PROVIDED "AS IS," AND THE CORPORATION AND ITS MEMBERS AND THEIR AFFILIATES, MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, OR TITLE; THAT THE CONTENTS OF THIS DOCUMENT ARE SUITABLE FOR ANY PURPOSE; OR THAT THE IMPLEMENTATION OF SUCH CONTENTS WILL NOT INFRINGE ANY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.
IN NO EVENT WILL THE CORPORATION OR ITS MEMBERS OR THEIR AFFILIATES BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL, PUNITIVE OR CONSEQUENTIAL DAMAGES, ARISING OUT OF OR RELATING TO ANY USE OR DISTRIBUTION OF THIS DOCUMENT, WHETHER OR NOT (1) THE CORPORATION, MEMBERS OR THEIR AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES, OR (2) SUCH DAMAGES WERE REASONABLY FORESEEABLE, AND ARISING OUT OF OR RELATING TO ANY USE OR DISTRIBUTION OF THIS DOCUMENT. THE FOREGOING DISCLAIMER AND LIMITATION ON LIABILITY DO NOT APPLY TO, INVALIDATE, OR LIMIT REPRESENTATIONS AND WARRANTIES MADE BY THE MEMBERS AND THEIR RESPECTIVE AFFILIATES TO THE CORPORATION AND OTHER MEMBERS IN CERTAIN WRITTEN POLICIES OF THE CORPORATION.
-->
<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:trp="http://www.onvif.org/ver10/replay/wsdl"
targetNamespace="http://www.onvif.org/ver10/replay/wsdl">
<wsdl:types>
<xs:schema targetNamespace="http://www.onvif.org/ver10/replay/wsdl"
xmlns:tt="http://www.onvif.org/ver10/schema" xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified" version="2.2.1">
<xs:import namespace="http://www.onvif.org/ver10/schema"
schemaLocation="../ver10/schema/onvif.xsd"/>
<!-- Message Request/Responses elements -->
<!--===============================-->
<xs:element name="GetServiceCapabilities">
<xs:complexType>
<xs:sequence/>
</xs:complexType>
</xs:element>
<xs:element name="GetServiceCapabilitiesResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="Capabilities" type="trp:Capabilities">
<xs:annotation>
<xs:documentation>The capabilities for the replay service is returned in the
Capabilities element.
</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:complexType name="Capabilities">
<xs:sequence>
<xs:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="ReversePlayback" type="xs:boolean" default="0">
<xs:annotation>
<xs:documentation>Indicator that the Device supports reverse playback as defined in the
ONVIF Streaming Specification.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="SessionTimeoutRange" type="tt:FloatAttrList">
<xs:annotation>
<xs:documentation>The list contains two elements defining the minimum and maximum valid
values supported as session timeout in seconds.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="RTP_RTSP_TCP" type="xs:boolean">
<xs:annotation>
<xs:documentation>Indicates support for RTP/RTSP/TCP.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:anyAttribute processContents="lax"/>
</xs:complexType>
<xs:element name="Capabilities" type="trp:Capabilities"/>
<!--===============================-->
<xs:element name="GetReplayUri">
<xs:complexType>
<xs:sequence>
<xs:element name="StreamSetup" type="tt:StreamSetup">
<xs:annotation>
<xs:documentation>Specifies the connection parameters to be used for the stream. The
URI that is returned may depend on these parameters.
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="RecordingToken" type="tt:ReferenceToken">
<xs:annotation>
<xs:documentation>The identifier of the recording to be streamed.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="GetReplayUriResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="Uri" type="xs:anyURI">
<xs:annotation>
<xs:documentation>The URI to which the client should connect in order to stream the
recording.
</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="SetReplayConfiguration">
<xs:complexType>
<xs:sequence>
<xs:element name="Configuration" type="tt:ReplayConfiguration">
<xs:annotation>
<xs:documentation>Description of the new replay configuration parameters.
</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="SetReplayConfigurationResponse">
<xs:complexType>
<xs:sequence>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="GetReplayConfiguration">
<xs:complexType>
<xs:sequence>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="GetReplayConfigurationResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="Configuration" type="tt:ReplayConfiguration">
<xs:annotation>
<xs:documentation>The current replay configuration parameters.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
</wsdl:types>
<wsdl:message name="GetServiceCapabilitiesRequest">
<wsdl:part name="parameters" element="trp:GetServiceCapabilities"/>
</wsdl:message>
<wsdl:message name="GetServiceCapabilitiesResponse">
<wsdl:part name="parameters" element="trp:GetServiceCapabilitiesResponse"/>
</wsdl:message>
<wsdl:message name="GetReplayUriRequest">
<wsdl:part name="parameters" element="trp:GetReplayUri"/>
</wsdl:message>
<wsdl:message name="GetReplayUriResponse">
<wsdl:part name="parameters" element="trp:GetReplayUriResponse"/>
</wsdl:message>
<wsdl:message name="SetReplayConfigurationRequest">
<wsdl:part name="parameters" element="trp:SetReplayConfiguration"/>
</wsdl:message>
<wsdl:message name="SetReplayConfigurationResponse">
<wsdl:part name="parameters" element="trp:SetReplayConfigurationResponse"/>
</wsdl:message>
<wsdl:message name="GetReplayConfigurationRequest">
<wsdl:part name="parameters" element="trp:GetReplayConfiguration"/>
</wsdl:message>
<wsdl:message name="GetReplayConfigurationResponse">
<wsdl:part name="parameters" element="trp:GetReplayConfigurationResponse"/>
</wsdl:message>
<wsdl:portType name="ReplayPort">
<wsdl:operation name="GetServiceCapabilities">
<wsdl:documentation>Returns the capabilities of the replay service. The result is returned in
a typed answer.
</wsdl:documentation>
<wsdl:input message="trp:GetServiceCapabilitiesRequest"/>
<wsdl:output message="trp:GetServiceCapabilitiesResponse"/>
</wsdl:operation>
<wsdl:operation name="GetReplayUri">
<wsdl:documentation>
Requests a URI that can be used to initiate playback of a recorded stream
using RTSP as the control protocol. The URI is valid only as it is
specified in the response.
This operation is mandatory.
</wsdl:documentation>
<wsdl:input message="trp:GetReplayUriRequest"/>
<wsdl:output message="trp:GetReplayUriResponse"/>
</wsdl:operation>
<wsdl:operation name="GetReplayConfiguration">
<wsdl:documentation>
Returns the current configuration of the replay service.
This operation is mandatory.
</wsdl:documentation>
<wsdl:input message="trp:GetReplayConfigurationRequest"/>
<wsdl:output message="trp:GetReplayConfigurationResponse"/>
</wsdl:operation>
<wsdl:operation name="SetReplayConfiguration">
<wsdl:documentation>
Changes the current configuration of the replay service.
This operation is mandatory.
</wsdl:documentation>
<wsdl:input message="trp:SetReplayConfigurationRequest"/>
<wsdl:output message="trp:SetReplayConfigurationResponse"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="ReplayBinding" type="trp:ReplayPort">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="GetServiceCapabilities">
<soap:operation soapAction="http://www.onvif.org/ver10/replay/wsdl/GetServiceCapabilities"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="GetReplayUri">
<soap:operation soapAction="http://www.onvif.org/ver10/replay/wsdl/GetReplayUri"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="GetReplayConfiguration">
<soap:operation soapAction="http://www.onvif.org/ver10/replay/wsdl/GetReplayConfiguration"/>
<wsdl:input>
<soap:body parts="parameters" use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body parts="parameters" use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="SetReplayConfiguration">
<soap:operation soapAction="http://www.onvif.org/ver10/replay/wsdl/SetReplayConfiguration"/>
<wsdl:input>
<soap:body parts="parameters" use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body parts="parameters" use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<!--===============================-->
<!--===============================-->
<wsdl:service name="ReplayService">
<wsdl:port name="ReplayPort" binding="trp:ReplayBinding">
<soap:address location="http://www.onvif.org/ver10/replay/wsdl"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>

File diff suppressed because it is too large Load Diff

82
pom.xml Normal file
View File

@ -0,0 +1,82 @@
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.onvif</groupId>
<artifactId>onvif</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<properties>
<java.version>1.8</java.version>
<cxf.version>3.3.2</cxf.version> <!-- 3.1.10 -->
<checkstyle-maven-plugin.version>3.0.0</checkstyle-maven-plugin.version>
<javax.activation.version>1.2.0</javax.activation.version>
<jaxb.api.version>2.3.1</jaxb.api.version> <!-- 2.3.0, 2.3.1 or 2.4.0-b180830.0359 -->
<java.release>8</java.release>
<!-- <java.version>1.10</java.version>-->
<maven-compiler-plugin.version>3.8.1</maven-compiler-plugin.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<modules>
<module>onvif-ws-client</module>
<module>onvif-java</module>
</modules>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>${maven-compiler-plugin.version}</version>
<configuration>
<jdkToolchain>
<version>${java.release}</version>
</jdkToolchain>
<!-- <release>${java.release}</release> -->
<source>${java.version}</source>
<target>${java.version}</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<version>${checkstyle-maven-plugin.version}</version>
<configuration>
<configLocation>google_checks.xml</configLocation>
</configuration>
<executions>
<execution>
<goals>
<goal>check</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<reporting>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<version>${checkstyle-maven-plugin.version}</version>
<configuration>
<configLocation>google_checks.xml</configLocation>
</configuration>
</plugin>
</plugins>
</reporting>
<distributionManagement>
<repository>
<id>internal</id>
<url>file://${project.build.directory}/mvn-repo</url>
</repository>
</distributionManagement>
</project>