我正在编写一个胖客户端,它利用SOAP服务来实现某些功能(错误报告等)
我有JAX-WS工作正常,但默认情况下(至少在netbeans中)它每次初始化服务时从远程服务器获取WSDL.我希望这有助于提供一些版本支持等,但这不是我想要的.
我已将wsdllocationarg 添加到wsimport以将生成的类指向本地资源.以下代码段是ApplicationService.java中WSDL资源的URL加载.
baseUrl = net.example.ApplicationService.class.getResource(".");
url = new URL(baseUrl, "service.wsdl");
Run Code Online (Sandbox Code Playgroud)
我很确定在net/example/resources包中指向存储在jar中的资源应该没有问题,并且jar本身按预期构造.但是服务不会加载...具体来说,当我调用ApplicationService.getPort()时,我得到一个NullPointerException;
这可能吗?还是只是一场疯狂的追逐?
我目前正在与具有XML Schema工作<xsd:annotation>/ <xsd:documentation>对大多数类型和元素.当我从这个XML Schema生成Java Bean时,那些Beans的Javadoc只包含一些关于类型/元素的允许内容的通用生成信息.
我希望<xsd:documentation>在相关位置看到标记的内容(例如,对于ComplextType,该标记的内容应该显示在生成的类的Javadoc中以表示该complexType).
有没有办法实现这个目标?
编辑:此XML Schema将在带有JAX-WS的WSDL中使用,因此该标记也可能是合适的.
编辑2:我读过<jxb:javadoc>.根据我的理解,我可以在单独的JAXB绑定文件中或直接在XML Schema中指定.这几乎可以解决我的问题.但我宁愿使用现有的<xsd:documentation>标签,因为Javadoc不是文档的主要目标(主要是关于数据结构的信息,而不是关于从它生成的Java Bean),并允许非JAXB工具访问信息.好.提供两者的文档<jxb:javadoc>并xsd:documentation>"感觉"错误,因为我没有充分理由重复数据(和工作).
编辑3:多亏了帕斯卡的答案,我意识到,我已经有半个解决方案:<xsd:documentation>的complexTypes的写入它的Javadoc的开始!问题仍然是只有该complexTypeS用于和simpleTypeS(这也可导致在一个类)和元素仍然Javadoc的更小.
我想通过将它存储为servlet上下文属性来共享我的servlet和我的webservice(JAX-WS)之间的对象.但是如何从Web服务中检索servlet上下文?
我正在使用jax-ws编写Web服务.Web服务的一个方法返回bean,它包含对其父级的引用.为了防止循环引用,我在bean中使用了JAXB @XMLID和@XMLIDRef注释.
然后我为java客户端生成代理类一切正常,id解析为Object属性.但后来我在Visual Studio for .NET中生成Web服务客户端代理,它将idrefs解释为字符串属性,而不是Object.
是否可以通过解析idrefs从wsdl for .NET生成代理类?
用@XMLRootElement和注释一个类有什么区别@XMLType.我一直在注释类@XMLType的结构将在XML模式中多次使用,@XMLRootElement何时只使用一次 - 这是最好的方法吗?
一个不同但相关的问题,我将在这里包括.该@XMLType标注有一个propOrder属性来指定其中责令其元素出现-是有一个相当于为@XMLRootElement?
我正在使用这些注释与JAX-WS注释一起创建Web服务,如果这有任何区别的话.
我正在尝试在JBoss 5.1.0上的WAR应用程序中部署一些Web服务.
我使用JAX-WS工具从现有的wsdl创建了源文件wsgen.这创建了Service文件和@XmlType带注释的clases,它们将充当请求和响应包装器.
这个类在JBoss 4.2.3上运行良好,但是当转向JBoss 5.1.0时,我得到了这个例外.
java.lang.UnsupportedOperationException:必须由SOAPMessage的所有子类重写setProperty
我的配置:
提前致谢!
我有一个奇怪的问题.
使用wsimport我从WSDL(在专用的eclipse java项目中)生成了JES-WS代码.这在JDK6中工作正常,没有任何外部依赖(在Eclipse中运行)
我有第二个项目,我曾经使用过Apache CXF.如果我将1.)中描述的代码复制到这个项目中,那么JDK突然不会执行JAX-WS的东西(我生成的文件),而是Apache CXF.
如何防止Apache CXF"运行"JAX-WS的东西.(问题是,CXF无法运行代码......).我也完全不明白Apache CXF如何发现这些类.我没有注册他们吗?
非常感谢你!马库斯
我有一个应用程序需要向Internet上的系统发出SOAP客户端请求,因此需要通过我们的HTTP代理.
可以通过设置系统属性值(如系统属性)来执行此操作:
// Cowboy-style. Blow away anything any other part of the application has set.
System.getProperties().put("proxySet", "true");
System.getProperties().put("https.proxyHost", HTTPS_PROXY_HOST);
System.getProperties().put("https.proxyPort", HTTPS_PROXY_PORT);
Run Code Online (Sandbox Code Playgroud)
或者通过设置默认的ProxySelector(也是系统范围的设置):
// More Cowboy-style! Every thing Google has found says to do it this way!?!?!
ProxySelector.setDefault(new MyProxySelector(HTTPS_PROXY_HOST, HTTPS_PROXY_PORT));
Run Code Online (Sandbox Code Playgroud)
如果其他子系统可能希望通过不同的HTTP代理或没有任何代理访问Web服务器,这些都不是明智的选择.使用the ProxySelector将让我配置哪些连接使用代理,但我必须为巨大的应用程序中的每一件事情弄清楚.
一个合理的API会有一个方法,java.net.Proxy就像java.net.Socket(java.net.Proxy proxy)构造函数那样接受一个对象.这样,必要的设置对于需要设置它们的系统部分是本地的.有没有办法用JAX-WS做到这一点?
我不想设置系统范围的代理配置.
我有一个第三方jar,它附带一个jaxb-impl.jar并将其包含在其manifest类路径中.问题是,似乎提供自己的JAXB版本(无论它是哪个版本)似乎打破了JAX-WS中的SoapFaultBuilder.
根据非官方的JAXB指南,似乎Sun在将JAXB折叠到JDK中时故意更改了包名称,以避免与独立版本冲突.但是,随JDK一起提供的SoapFaultBuilder(我相信JAX-WS的一部分)明确依赖于新的内部包名.如果您添加了一个独立的JAXB jar(即使它与JAXB的版本号相同),这会在构建错误消息时导致失败.
这是我的小测试案例:我制作一个简单的Web服务:
package wstest;
import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.jws.soap.SOAPBinding.Style;
//Service Endpoint Interface
@WebService
@SOAPBinding(style = Style.RPC)
public interface HelloWorld{
@WebMethod String getHelloWorldAsString(String name);
}
Run Code Online (Sandbox Code Playgroud)
一个简单抛出异常的实现.(因为问题只出现在SOAPFaultBuilder中):
package wstest;
import javax.jws.WebService;
//Service Implementation
@WebService(endpointInterface = "wstest.HelloWorld")
public class HelloWorldImpl implements HelloWorld{
@Override
public String getHelloWorldAsString(String name) {
//return "Hello World JAX-WS " + name;
throw new RuntimeException("Exception for: " + name);
}
}
Run Code Online (Sandbox Code Playgroud)
还有一个发布Web服务的类:
package wstest;
import javax.xml.ws.Endpoint;
//Endpoint publisher
public class HelloWorldPublisher{ …Run Code Online (Sandbox Code Playgroud)