次のWebサービスを利用する際の注意制限事項について説明します。
注:入力ファイルの操作のうち、未チェックまたは安全ではないものがあります。 注:詳細については、-Xlint:unchecked オプションを指定して再コンパイルしてください。当該条件の場合、この警告について何ら対策を講じる必要はありません。この警告が出ていても、Javaコンパイル、wscompileコマンド、および配備処理は正常に動作しています。
JAX-WSはJAX-RPCの後継仕様ですが、Java-XMLバインディングにJAXBを利用しているため、一部互換性がありません。クライアントアプリケーションを作成する際には以下の注意が必要です。
<javaType name="java.util.Calendar" xmlType="xs:dateTime" parseMethod="javax.xml.bind.DatatypeConverter.parseDate" printMethod="javax.xml.bind.DatatypeConverter.printDate"/>
javax.xml.ws.Dispatchインタフェースを使用し、 WSDLのschemaの定義でメッセージの型に次のいずれかを指定した場合、 その型の上限値や下限値を超える値の指定が可能ですが受信側では問題を検出することはできません。 この場合、アプリケーションの引数や戻り値は、不正な値に変換されてしまいます。 そのため送信側で事前にチェックが必要です。
wsimportコマンドはWSDLへのアクセスを行う際に、
デフォルトでシステムのプロキシ設定を使用します。
システムのプロキシ設定の内容やネットワーク環境により、WSDLへのアクセスに失敗する場合があります。
この場合、{WebOTXインストールフォルダ}\bin\wsimport.bat
を編集し、「%JAVA_CMD%」で始まる行について、wsimport実行時のシステムプロパティに以下の設定を追加してください。
-Dcom.nec.webotx.webservice.tools.ws.Invoker.noSystemProxies=true
JAX-WSでは、encoded形式のSOAPメッセージをサポートしていません。literal形式のSOAPメッセージを利用してください。
例) WSDLで指定する場合
<operation name="someOperation"> <soap:operation soapAction="" /> <input> <soap:body use="literal" /> </input> <output> <soap:body use="literal" /> </output> <fault name="someOperationFault"> <soap:fault name="someOperationFault" use="literal" /> </fault> </operation>
例) プログラムで指定する場合
import javax.jws.WebService; import javax.jws.soap.SOAPBinding; @SOAPBinding(use=SOAPBinding.Use.LITERAL) @WebService public class ServerImpl { : }
javax.xml.ws.Dispatchインタフェースを利用して動的呼び出しを行う場合に、JAXBContextクラスを利用したMESSAGEモードでの呼び出しはサポートしていません。利用する場合は、PAYLOADモードを指定してください。
例) プログラムで指定する場合
Service service = ・・・; QName qname = ・・・; JAXBContext context = ・・・; Dispatch dispatch = service.createDispatch(qname, context, Service.Mode.PAYLOAD);
javax.xml.ws.Dispatchインタフェースを利用して非同期通信を行う場合に、ハンドラのhandleMessage()およびhandleFault()の戻り値でfalseを返却する場合の動作はサポートしていません。必ずtrueを返却するようにハンドラを実装してください。
例) ハンドラの実装例
public class SomeHandler implements SOAPHandler <SOAPMessageContext> { public boolean handleMessage(SOAPMessageContext context) { : : return true; // 非同期通信で呼ばれるハンドラは必ずtrueを返すようにします } public boolean handleFault(SOAPMessageContext context) { : : return true; // 非同期通信で呼ばれるハンドラは必ずtrueを返すようにします } }
rpc/literal形式もしくはdocument/literal形式でparameterStyle属性にBAREを指定したWebサービスは、
java.util.Collectionクラスの送受信をサポートしていません。java.util.Collectionクラスを送受信する場合は、document/literal形式の
parameterStyle属性にWRAPPEDを利用してください。
例) WSDLで指定する場合
<xs:complexType name="someOperation"> <xs:sequence> <xs:element name="arg0" type="xs:int"/> <xs:element name="arg1" type="xs:int"/> // bareだと同じパラメータは1回しか現れない </xs:sequence> </xs:complexType> <message name="someOperation"> <part name="parameters" element="tns:someOperation"/> // bareだとここでパラメータを複数指定する </message> <operation name="someOperation"> <input message="tns:someOperation"/> <output message="tns:someOperationResponse"/> </operation>
例) プログラムで指定する場合、デフォルトでdocument/literalのwrapped型が使用されます。javax.jws.soap.SOAPBindingアノテーションで指定するため、プログラム中でjavax.jws.soap.SOAPBindingアノテーションを指定している場合は注意が必要です。
import javax.jws.WebService; import javax.jws.soap.SOAPBinding; @SOAPBinding(style=SOAPBinding.Style.DOCUMENT, use=SOAPBinding.Use.LITERAL, parameterStyle=SOAPBinding.ParameterStyle.WRAPPED) @WebService public class ServerImpl { public int someOperation(int arg0, int arg1) { : : } }
配備記述子に記述するエンドポイントURLでは、暗黙URL(URLに"*."を利用している)はサポートしていません。
メソッドのパラメータや戻り値にインタフェースを指定することはできません。メソッドのパラメータや戻り値には、実装クラスを指定するようにしてください。
<?xml version="1.0" encoding="UTF-8"?> <web-app ...> ... <servlet> <servlet-name>Jersey REST Service</servlet-name> <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class> </servlet> ... </web-app>
<?xml version="1.0" encoding="UTF-8"?> <web-app ...> ... <servlet> <servlet-name>Jersey REST Service</servlet-name> <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class> </servlet> ... </web-app>
grant codeBase "file:${com.nec.webotx.instanceRoot}/lib/-" { permission java.lang.reflect.ReflectPermission "suppressAccessChecks"; permission org.osgi.framework.AdminPermission "*", "resource"; };ポリシーファイルの設定は [ドメイン構築・基本設定ガイド > 3. ドメイン > 3.7. ポリシーファイルの設定] を参照ください。
java.lang.RuntimeException: javax.naming.NameNotFoundException: "CDIExtension" not found [Root exception is javax.naming.NameNotFoundException: "CDIExtension" not found]その場合、システムプロパティに
-Dcom.nec.webotx.jersey.server.impl.cdi.lookupExtensionInBeanManager=trueを追加してください。